Tomcat JSP提交参数中文乱码问题解决



Tomcat JSP提交参数中文乱码问题解决。其实这个网上说的很多,以前自己一直没注意这个问题,今天看书偶然碰到,就研究了一下,做个记录,其实大家在网上可能都说烂了这个问题了。

首先在jsp网页上要做如下两个设置:

<%@page contentType=”text/html; charset=UTF-8″%>

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

 

然后按参数的提交方式分两种情况,一种是post,一种是get。

post的提交方式,比较容易,不需要其他的设置,直接在取参数前,执行一句request的编码即可:

request.setCharacterEncoding(“UTF-8″);

取得的中文就不会是乱码了。

 

另外一种是get方式:这个包括使用url参数,和form标签的method属性设为get。

但是这种情况下,只使用request.setCharacterEncoding(“UTF-8″);不起作用,还要在tomcat的server.xml的


<Connector port=”8080″ protocol=”HTTP/1.1″

connectionTimeout=”20000″

redirectPort=”8443″/>

节点中,加上useBodyEncodingForURI=”true”这个属性,这属性的默认值 是false,request.setCharacterEncoding(“UTF-8″);才会起作用。

另外也可以在那个节点中加上URIEncoding=”UTF-8″属性,这样就不需要使用 request.setCharacterEncoding(“UTF-8″);了,直接就可以正确的读出中文参数的值,但是这种情况只针对使用get方式的情况,使用post提交的方式,仍然必须使用request.setCharacterEncoding(“UTF-8″);,不然读出的中文就是乱码。

 

另外有一种通用的方法,不论post或get都可以处理,但是这种方法只能做个别处理,而不能做统一处理。因为tomcat会默认使用ISO8859_1来对这些参数的值进行编码,所以可以不做其他设置,而直接使用如下的程序来转换编码:

String a = new String(request.getParameter(“a”).getBytes(“ISO8859_1″),”UTF-8″);

 

上面最开始提到的get和post两种方式的处理方法,可以方便的制作一个filter,在处理请求前,对所有的request都设置它的编码为需要的编码方式,这样就不用在每次处理的时候来设置编码了。我就不废话说怎么做filter了。

 

不过这里有一种比较特别的情况,就是如果页面的编码使用的是utf-8的话,当点击链接跳转到新网页的时候,url会使用uft-8编码,但如果是在浏览器地址栏里直接输入的话,如果是中文系统的话,它会使用gb2312来编码,如果程序上的处理使用utf-8来处理的话,是显示不出正确的中文的。这个我在我的中文windows2003下做了测试。