一、Request请求中文参数乱码问题解决方案:
1、GET请求中文参数值乱码问题解决:
a)解决乱码的核心思路,就是把得到的乱码按照原来乱码的步骤逆序操作。
1、先以iso-8895-1进行编码
2、然后再以utf-8进行解码
3、代码示例:
String username = request.getParameter("username");
username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
b)配置tomcat的server.xml配置文件,找到以下位置,新增 URIEncoding = "UTF-8"。
<Connector URIEncoding = "UTF-8" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
2、POST请求中文参数值乱码问题解决
POST请求方式乱码的原因是:Tomcat服务器对参数的默认编码是ISO-8859-1
POST请求乱码解决,只需要在获取请求参数之前调用 request.setCharacterEncoding("UTF-8"); 方法设置字符集 即可。
注意点:setCharacterEncoding必须要获取请求参数之前调用才有效。
二、Response服务器和客户端中文乱码问题
设置服务器的字符串编码
//设置服务器输出的编码为UTF-8
response.setCharacterEncoding("UTF-8");
设置客户端的字符串显示编码。
//告诉浏览器输出的内容是html,并且以utf-8的编码来查看这个内容。
response.setHeader(“Content-type”, “text/html; charset=UTF-8”);
同时设置服务器和客户端的字符串编码(推荐)。
response.setContentType("text/html;charset=utf-8");
三、采用过滤器解决编码问题
方案一和方案二可以解决单个程序的编码问题,对于整个项目来讲,建议使用过滤器解决编码问题。
我们可以自己动手编写自己的编码过滤器,步骤如下:
1、编写自己的过滤器:
package com.test.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter
{
@SuppressWarnings("unused")
private FilterConfig config;
private String encoding;
public void destroy()
{
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException
{
this.config = config;
this.encoding = config.getInitParameter("encoding");
}
}
2、web.xml做如下配置:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>
com.test.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter>