tomcat 的中文编码问题

来源:互联网 发布:在淘宝买被子好吗 编辑:程序博客网 时间:2024/04/23 17:53

Overview


Tomcat是一个Servlet容器,有一些使用上需要注意的地方。tomcat内部默认的编码方式是ISO8859_1,当采用表单传值或者地址(url)传值时,需要注意编码转换以防中文乱码。
以下将介绍两种不同参数传值方式的编码转换处理方法。
参数提交方式
参数的提交方式有两种,一种是post,一种是get。
采用post 传值方式,通常出现在表格form中,这种参数提交方式比较容易,不需要其他的设置,直接在取参数前,执行一句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");不然读出的中文就是乱码。
因此最简单的方法是 在 tomcat 的sercer.xml文件中 加上useBodyEncodingForURI="true" 属性,之后每次使用request之前,request.setCharacterEncoding("UTF-8"); 那么就可以解决中文乱码问题。
以上是通过 设置 request 或者xml配置文件,进行修改实现。还有一种方法可以采用 String a = new String(request.getParameter("a").getBytes("ISO8859_1"),"UTF-8"); 其中 a 是某个参数变量, 特别注意:如果已经设置了 request.setCharacterEncoding("utf-8"), 在采用上述的 转换,则会使得页面报错,因此若要采用 此种方法,则不要设置request.setCharacterEncoding("utf-8")。
URL Encoding问题
URL 采用get的传值方式,因此 仅仅使用 request.setCharacterEncoding("utf-8"),无法实现编码转换,需要特别注意,应该采用 String a = new String(request.getParameter("a").getBytes("ISO8859_1"),"UTF-8"); 方式实现编码转换同时采用URL 传值时,对变量的值,也应该将其设置为UTF-8 , 可以采用 URLEncoder.encode(containerName,"UTF-8"),将其设置为UTF-8.  示例如下 "url=index.jsp?conPages=" + conPages + "&objPages="+ objPages+ "&path=" + URLEncoder.encode(path,"UTF-8")); 其中 path 可能包含中文,因此传值前,将其转化为UTF-8
原创粉丝点击