SpringMVC的POST和GET乱码规范解决

来源:互联网 发布:西南石油大学软件专业 编辑:程序博客网 时间:2024/06/07 09:18

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编码。

参考链接:

http://blog.csdn.net/Marvel__Dead/article/details/71424505

1 0
原创粉丝点击