1.请求参数乱码现象的产生
当客户端使用编码与web容器使用编码不一致时,便有可能产生乱码情况
例一:网页编码使用UTF-8,通过Post方式发出“晴”这个中文字符的参数请求。web容器使用ISO-8859-1处理编码。
相当于浏览器所做操作:
java.net.URLEncoder.encode("晴", "UTF-8");
“晴”按照UTF-8编码为:%E6%99%B4
则相当于web容器所做操作:
java.net.URLDecoder.decode("%E6%99%B4" , "ISO-8859-1");
故此会出现请求参数乱码现象
2.Post请求参数编码处理
在接受任何请求参数之前,执行以下语句(request为HttpServletRequest实例化对象):
request.setCharacterEncoding("UTF-8");
使得容器在接受任何请求参数时,使用UTF-8来处理。即可解决乱码问题
3.Get请求参数编码处理
request.setCharacterEncoding("UTF-8");
以上语句对于Get请求参数乱码问题并不起作用。
why?
在API中,该方法有如下说明:
Overrides the name of the character encoding used in the body of this request
该方法只对请求体中的字符编码起效。故在Get请求时,它并不能解决问题。
依旧针对例一,换作为Get请求,正确的处理方式如为:
String name = request.getParameter("name"); name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
首先通过String的getBytes()获得该字符串的字节数组,再重新构造正确编码的字符串即可。