编码之请求编码
注意:tomcat8,默认编码已经是UTF-8
请求编码
客户端发送给服务器的请求参数是什么编码?
这需要分情况,客户端传递数据有两种方式。
1.在地址栏中直接给出数据(gbk编码),这个基本甚少会在地址栏直接打参数,可以忽略这个。
2.在页面中点击表单或者超链接,如果你的响应页面是utf-8,那么你传递的数据就是utf-8。
3.举例:我们进行登录的时候,首先请求的是index首页,这个Index页面返回给客户端的是什么编码,那么我们登录表单提交的就是什么编码。
通俗理解:我们表单的编码和上一个页面有关。
* 服务器端默认使用什么编码来解码参数:
服务器端默认使用ISO-8859-1来解码!所以这一定会出现乱码的!因为iso不支持
*请求编码处理分为两种:GET和POST:GET请求参数不在请求体中,而POST请求参数在请求体中,所以它们的处理方式是不同的!
* GET请求编码处理:
1. String username=request.getParameter("username");
username=new String(username.getBytes(“ISO-8859-1”),”utf-8”);
2. 在server.xml中配置URIEncoding=utf-8,但是一般都不让用。
* POST请求编码处理:
1.String username=request.getParameter("username");
username=new String(username.getBytes(“ISO-8859-1”),”utf-8”);
2.在获取参数之前调用request.setCharacterEncoding("utf-8");
request请求编码: 在获取参数之前,需要先调用request.setCharacterEncoding("utf-8"); 使用getParameter()来获取参数 response响应编码: 在使用getWriter()方法之前,先调用下面这个方法: response.setContentType("text/html;charset=utf-8") |
requestGET请求图解
步骤:
* GET
1、先获取来使用iso的错误字符串
2、回退,(使用utf-8)重编
代码示例:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * GET 1、先获取来使用iso的错误字符串 2、回退,(使用utf-8)重编 */
String username=request.getParameter("username");//获取参数 byte [] bytes=username.getBytes("ISO-8859-1");//get默认编码是ISO,进行解码 username=new String(bytes,"utf-8");//进行编码
} |
简介的写法为:
String username=request.getParameter("username");//获取参数
//把ISO-8859-1解码成字节数组,然后重新编成utf-8
username=newString(username.getBytes(“ISO-8859-1”),”utf-8”);
返回结果:
requestPOST请求图解
步骤:
/**
* 在获取参数之前,需要先调用request.setCharacterEncoding("utf-8");
使用getParameter()来获取参数
*/
代码示例:
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 在获取参数之前,需要先调用request.setCharacterEncoding("utf-8"); 使用getParameter()来获取参数 */
request.setCharacterEncoding("utf-8"); String username =request.getParameter("username"); System.out.println(username);
} |
返回结果: