Tomcat6 中文乱码(二)

时间:2023-01-10 18:10:29

参考了之前的一篇文章,在此略作总结,把关键要点也归纳一下:

 

1、对于JSP页面上有乱码的情况,首先要做的是统一编码集,比如都设定为UTF8。

 

 

2、对于GET参数有乱码的情况,在server.xml配置文件中,只要设定好URIEncoding就可以了;如下:

 

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF8" />

 

URIEncoding只对GET参数有效。


网上人说,useBodyEncodingForURI="true"是为了保证Tomcat4和5的兼容性,这个属性是针对POST参数乱码而设值的。我试了一下,只要后面谈到的步骤设置正确,这个可有可无。

 

 

3、然后就到了网上所推崇的Filter设置了。两个要点:

    首先,在Filter的doFilter方法里面设置request.setCharacterEncoding("UTF8"); 这是为了在传参数之前就用UTF8进行编码,然后传递。但这个设置只对 POST参数有效。

    其次,这个Filter在web.xml声明中,一定要放在首位,而且是其他Filter的前面。 否则没有效果,猜想这可能与,request在被读取之后再设 setCharacterEncoding无效,有关。

 

 

4、确保依次设置好以上三条,应该不在有乱码之虞。同时,如果出现问题,也可以使用以下方法救急:

<%= new String(request.getParameter("userName").getBytes("iso-8859-1"),"UTF8") %>

因为Tomcat默认是基于ISO-8859-1的,因此在UTF8的JSP页面输入参数以后,Tomcat也会按ISO-8859-1编码,然后传递给下一个JSP页面。因此在下一个JSP页面中按上面写的这样“反编码”一下,就可以得到正确的UTF8值了。