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 也是可行的。