SpringMVC的POST和GET乱码规范解决

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值