乱码问题是我们常遇到的问题,现在将乱码问题做一个详细的总结。
首先我们要清楚参数的提交方式分为POST和GET两种方式。
POST乱码解决方式:
1、 原始的方式:
request. setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
以上同时解决了参数传递时的乱码和参数回显时的乱码。
2、 编码过滤器
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
处理GET方式的乱码解决方案:
1、 在Tomcat中设置比编码格式
要设置GET的编码,可以修改server.xml文件中,相应的端口的Connector的属性:URIEncoding="UTF-8",这样,GET方式提交的数据才会被正确解码。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
2、利用Java对格式进行转换
String agentnames = newString(req.getParameter("agentnames").getBytes("ISO-8859-1"),"utf-8");
3、 利用浏览器两次转码,Java中后台解码方式解决GET请求的乱码方式
前端: var str= encodeURI(encodeURI("转电话配置模板.xlsx"));
后端 String file_name=java.net.URLDecoder.decode(str,"UTF-8");