POST乱码
- 方法:在web.xml添加post乱码filter
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上可以解决post请求乱码问题。
GET乱码
- GET乱码产生原因是:编码会经历两次编码,第一次浏览器会把不是ASCll码的字符编码成ASCll码,常规浏览器会通过GBK2312或者UTF-8来对参数进行编码(通常按照本页编码方式编码GET参数,谷歌浏览器和其它浏览器是这个规范,但是IE就不是了,它是按照系统的编码,所以在大陆一直都是GBK2312编码),第二次都是统一按照ISO8859-1编码成0101011等字节流进行传输,所以如果要得到原始数据,服务器端会进行两次解码,第一次统一的,按照ISO8859-1解码,而我们Tomcat第二次默认也是(ISO8859-1)解码(通常我们可以在conf下的server.xml中设置默认编码)。最终原因就是因为浏览器第一次编码和Tomcat第二次解码方式不一样,才会产生乱码。
对于get请求中文参数出现乱码解决方法有两个:
修改tomcat配置文件添加编码与工程编码一致,如下:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
另外一种方法对参数进行重新编码:
String userName new = String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按ISO8859-1解码,之后按utf-8编码,就会得到正确字符。
但是这些操作的前提是,客户端的编码必须统一为UTF-8编码,所以我们要手动通过js把字符编码成UTF-8码(浏览器会把不是ASCll字符编码通过编码转换成ASCll码,所以通过我们手动UTF-8编码后,这个时候的字符就是ASCll码了,浏览器不会再重复编码,之后就能够编码成ISO8859-1的字节流进行传输了)。
通常通过js的UrlEncodeComponent(接受字符串)进行UTF-8编码。
参考链接: