总算找到个看起来比较靠谱的说明:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
另外还参考了:http://www.iteye.com/topic/179279
1.页面乱码,要在页面前端加上
JSP:
<%@page language="java" pageEncoding="UTF-8"%>
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2.页面form传入参数乱码(主要是由于tomcat默认采用ISO-8859-1编码)
可以采用以下代码将获得参数test:
String theParam = new String(request.getParameter("someParam").getBytes("ISO-8859-1"), "UTF-8");
由于以上方法需要在取每个参数的时候都进行类似操作,整体修改的方法是写一个过滤器:
package filters;
import java.io.*;
import javax.servlet.*;
/*
* 字符编码设置过滤器
*/
public class SetCharacterEncodingFilter implements Filter {
@Override
public void destroy()
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding("utf-8");//将编码统一设置为UTF-8
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig config) throws ServletException
{
}
}
同时在web.xml中配置此过滤器:
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器方式仅对POST方法有效,要使FORM的GET方法也可以正确读取参数,要在TOMCAT的server.xml中修改Connector元素,为其加上URI-ENCODING="UTF-8"属性
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" URIEncoding="UTF-8"/>