海培

导航

springmvc项目关于中文乱码的一些总结

以前对中文乱码的问题一直没有深究,总是头痛医头,脚痛医脚,最后还是深陷于乱码的漩涡之中,最近两天狠下决心,研究了一下,才发现这里面的道道真是博大精深,要追根溯源,那要写个博士论文了,这里只简要说明几点:

1、强烈建议前后台编码要统一,如jsp的contentType="text/html; charset=UTF-8" pageEncoding="UTF-8";后端在tomcat的server.xml中配置 URIEncoding="UTF-8",在项目的web.xml中配置CharacterEncodingFilter;

2、对于get请求url中出现中文字符时,尽量要提前用 URLEncoder.encode(str,"utf-8")编码一下;此时,后端起能起到解码作用的只有1中的URIEncoding="UTF-8"配置,request.setCharacterEncoding("utf-8")只对POST请求有效,记住:URL中的PathInfo和QueryString字符串的编码和解码是由浏览器和应用服务器的配置决定的,我们的程序不能设置,不要期望用request.setCharacterEncoding()方法能设置URL中参数值解码时的字符集。

3、 对于POST方式,表单中的参数值对是通过request body发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。 在服务器端的程序中我们可以通过Request.setCharacterEncoding() 设置编码,然后通过request.getParameter获得正确的数据,也可以通过1中在web.xml中配置CharacterEncodingFilter正确获取;

4、在网上找了相关文章,有一种结论,server.xml中配置 URIEncoding="UTF-8"只作用于get请求中的中文乱码,于是我就进行测试它是否也作用于post请求?结果是去掉web.xml中配置CharacterEncodingFilter时,可以解决所有get请求乱码(包括ajax的get请求),但是出现一个很诡异的现象,ajax的post请求也能正常显示,但form表单post请求时却出现乱码问题,这个是我不能理解也不能解释的,如果有朋友能解释,希望能告诉我。

5、当然,我还继续做了测试,在去掉server.xml中 URIEncoding="UTF-8"配置,而加上web.xml中CharacterEncodingFilter配置时,对于post请求无乱码,get请求出现乱码,结果符合上面的结论!

6、关于乱码的问题推荐两遍文章,讲的非常细,http://blog.csdn.net/yzhz/article/details/1676796,http://blog.sina.com.cn/s/blog_95c8f1ac010198j2.html。

 

posted on 2016-01-07 16:14  海培  阅读(560)  评论(0编辑  收藏  举报