1.Spring MVC中为了防止客户端传入的中文数据出现乱码,可以使用Spring提供的编码过滤器来统一编码
1.1POST请求中文乱码问题解决
使用编码过滤器,只需要在web.xml中添加如下代码
<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>
在<filter>元素中,首先使用<fillter-class>元素配置了编码过滤器类org.springframework.web.filter.CharacterEncodingFilter,
然后使用<init-param>元素设置统一的编码为UTF-8。
最后配置<filter-mapping>元素,拦截前端页面中的所有请求,并交由名称CharacterEncodingFilter的编码过滤器类进行处理,将所有的请求信息内容以UTF-8的编码格式进行解析
1.2GET请求中文乱码问题解决
在使用参数之前重新编码
举例:
String username = new String(user.getUsername().getBytes("ISO8859-1"),"UTF-8");
其中ISO8859-1是Tomcat默认编码,需要将Tomcat编码后的内容再按UTF-8编码
2.请求参数中中文乱码问题
2.1POST
post是通过getReader()方法获取参数
request.setCharacterEncoding("UTF-8");//设置字符输入流的编码
先设置再获取
2.2GET
GET是通过getQueryString()方法获取参数
URL编码
1.将字符串按照编码方式转为二进制
2.每个字节转为2个1 6进制数并在前边加上%
乱码原因: tomcat 进行URL解码。默认的字符IS0-8859-1
举例:
1.先对乱码数据进行编码:转为字作数组
byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
2.字节数组解码
username = new String(bytes,StandardCharsets.UTF_8);
System.out.println("解决乱码后:"+ username);
2.3通用方式(GET/POST) :先编码,再解码
举例:
new String(username.getBytes("IS0-8859-1"),"UTF-8");
username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
Tomcat 8.0之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8