Request 和 Response 的中文乱码问题(Tomcat)

@draft 待详细展开

据说这个问题除了 Tomcat,别的服务器很少出现。有人说,Tomcat 的开发者考虑不周。一般的解决办法有三。具体如下:

传 ASCII

new String(String.getBytes("ISO-8859-1"), "UTF-8")

TODO

配置 Filter

这个方法非常简单,只需在 Filter 中写两行代码:

public final class Utf8Filter implements Filter {
   ... ...
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF8");
       response.setCharacterEncoding("UTF8");
        chain.doFilter(request, response);
    }
 ... ...
}

对应的 web.xml 中的设置为:

  <filter>
    <display-name>Utf8Filter</display-name>
    <filter-name>Utf8Filter</filter-name>
    <filter-class>org.iridium.pis.servlets.Utf8Filter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>Utf8Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3. 配置 server.xml

这个方法来源于月光博客的《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="UTF8" />

上面的代码,根据实际使用情况,加粗的 UTF8 写成 UTF-8 也是可行的。