参考了之前的一篇文章,在此略作总结,把关键要点也归纳一下:
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值了。