前景提要:工作中陆陆续续都碰到过中文乱码问题,总是遇到问题解决问题,从来没有总结思考,导致有时候环境发生变化的时候明明测试好的代码为什么上生产还是会乱码。
正文:首先,分析乱码的主要原因,在tomcat容器中(本项目背景容器为tomcat),容器默认从前台到后台传输数据采用的编码格式是ISO8859-1,而我们后台一般都是UTF-8解析的,这就导致了乱码,以前碰到这种问题都是采用流转换的方式(String aaa = new String(bbb.getBytes("iso8859-1","utf-8"),当然这种方式是有效的,还有同事推荐在方法上用produces注解,这些方式从本质上都是没问题的,但是如果每个接口都要去这么干的话会不会很麻烦昵?
当然有更简便的办法,那就是,在项目的web.xml中添加一个过滤器,过滤器的配置代码就不粘贴了,不过一定要记得把过滤器的代码沾到最上面,不然可能不生效。
是不是配置了过滤器所有接口就不会出现中文乱码昵?不是,这种过滤器只针对的是POST请求,像普通的GET请求该乱码还是会乱码。怎么办?----答案就是将在tomcat的安装目录setting.xml中,在端口设定行加上 URIEncoding="UTF-8" useBodyEncodingForURI="true"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
完成上述的配置后基本上就杜绝了一切乱码现象,有什么不足的希望大家踊跃补充,共同进步!!!
总结:1.工程web.xml中加utf-8过滤器
<filter>
<filter-name>setcharacter</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>setcharacter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.tomcat安装目录中,setting.xml中加上 URIEncoding="UTF-8" useBodyEncodingForURI="true"
补充:如果tomcat是在本地,eclipse中,那么你除了要改掉tomcat安装目录中setting.xml,还要改掉eclipse中的server配置,(前提是你用的是eclipse),具体eclipse的setting.xml的位置如下图