当客户端使用编码与web容器使用编码不一致时,便有可能产生乱码状况java
例一:网页编码使用UTF-8,经过Post方式发出“晴”这个中文字符的参数请求。web容器使用ISO-8859-1处理编码。web
至关于浏览器所作操做:数组
java.net.URLEncoder.encode("晴", "UTF-8");复制代码
“晴”按照UTF-8编码为:%E6%99%B4浏览器
则至关于web容器所作操做:bash
java.net.URLDecoder.decode("%E6%99%B4" , "ISO-8859-1");复制代码
故此会出现请求参数乱码现象ide
在接受任何请求参数以前,执行如下语句(request为HttpServletRequest实例化对象):this
request.setCharacterEncoding("UTF-8");
复制代码
使得容器在接受任何请求参数时,使用UTF-8来处理。便可解决乱码问题编码
request.setCharacterEncoding("UTF-8");
复制代码
以上语句对于Get请求参数乱码问题并不起做用。spa
why?.net
在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()得到该字符串的字节数组,再从新构造正确编码的字符串便可。