Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEncoding)即可:
- <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码-->
- <filter>
- <filter-name>springUtf8Encoding</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>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>springUtf8Encoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- 今天用springMVC接收表单中文数据时总量乱码,按照网上的解决方案设置过滤器后,post的表单不乱码了,但get的表单还是会乱码。
解决get方法乱码的方案是修改tomcat的server.xml配置文件,修改<connector>如下,加入字符集编码:
- <Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
过滤器的代码如下:
- <!-- Character Encoding filter -->
- <filter>
- <filter-name>encodingFilter</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>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- 以上这样可以解决几乎所有的总量(注意是“几乎”),一些get方法还是没办法解决,如
- <a href="test.jsp?key=中文" />
这里有个更好的解决办法就是配置tomcat的server.xml文件
- <Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>