一、为什么会有乱码问题
新建一个项目,在未做编码配置时,会出现乱码情况,即页面输入中文,后台接收到乱码,或者后台传的中文,页面乱码的情况。
会出现这样的问题,是因为浏览器和我们的java的编码不一样造成的。
情况一:页面输入中文,服务器端乱码。
表单提交时,浏览器会对中文进行编码,此时使用的是打开表单所在页面的字符集进行编码,一般为"UTF-8",而服务器默认使用的是"ISO-8859-1"来解码,所有就产生了乱码。
情况二:服务器传的中文,页面乱码。
服务器端默认是“ISO-8859-1”编码,程序员可能会修改。
页面新建时默认是"ISO-8859-1"解码,一般也会修改。
如果有两边不一致,就出现乱码情况。
二、如何解决
情况一
GET方式
在tomcat的 server.xml 配置中添加URIEncoding=“UTF-8”,代码如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
POST方式
以前我们的解决方式是,在服务器端将request的字符集修改为前端发送的字符,如UTF-8.
request.setCharacterEncoding("UTF-8");
但是,这种方式在单个方式时还不错,但是如果需要在所有的方法里加这句话,就会非常不好。因此,我们可以通过写一个过滤器的方式。而且,该过滤器还不需要我们去写,SpringMVC 提供了一个过滤器CharacterEncodingFilter,在web.xml中配置一下即可。
<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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
情况二
统一修改为“UTF-8”.
总结
限制Tomcat8.5之后,已经不需要配置GET的方式,Tomcat自动帮我们解决了,我们只需要配置一个全局的filter,针对POST方式的乱码就可以了。