在Tomcat下遇到了很多次中文乱码的问题,这次终于彻底解决了,引起中文乱码的原因,在此就不详述了,在网上有很多经典的文字解释。下面把我解决的方法说一下,以备以后查阅。
要彻底解决这个问题,要做二个地方的工作,一个就是TOMCAT_HOME/conf/server.xml,
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='UTF-8' />
其他的参数可能根据个案的不同会有不同,但与本案无关,默认的server.xml中是没有上面文字中黑体字的部分的,这部分要我们手工加上去。URIEncoding='UTF-8',是你希望的编码,如果希望是GBK,则把UTF-8改成GBK即可。这个配置只是解决了数据提交过程中采用GET方法时的乱码问题。
第二个工作,就是要加一个过滤器来解决采用POST方法时的乱码问题,过滤器的代码如下:
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 {
protected String encoding = null;
public void init(FilterConfig filterConfig) throws ServletException
{
this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}
public void destroy(){
}
}
然后,修改web.xml,在web.xml中加入
<filter>
<filter-name>CharacterEncode</filter-name>
<filter-class>CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其中黑体字的部分是你希望使用的编码,可自行修改。
这样,在后台取数据的时候,得到的就是以你想要的编码进行编码的数据了。