JAVA URL中带有中文时的处理
JAVA 中URL链接中文参数乱码的处理方法
解
决ajax提交中文、URL中文参数传递后的乱码问题的解决办法:http://www.javaly.cn/javahome/java
/content.detail/%E8%A7%A3%E5%86%B3ajax%E6%8F%90%E4%BA%A4%E4%B8%AD%E6%96%87%E3%80%81URL%E4%B8%AD%E6%96%87%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92%E5%90%8E%E7%9A%84%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/fdc1ed6c22069c56012282a321ed0465.faces
前面,我已经有2篇关于url中带中文,乱码的处理方法,今天又找到一种解决办法,觉得这个办法是最好的,所以再次拿出来给大家分享:
以前做法都是把中文进行Base64编码添加到URL后面,取得时候再用Base64解码。这样虽然能解决问题,但是太过于麻烦。
不同的AppServer如何对URL进行编码实现的原理可能会不同.(Resin和Tomcat肯定会不同)
在Tomcat下至少做到了这四个步骤就可以解决中文编码的问题
(1)确定JSP页面头部是否有:<%@ page contentType="text/html; charset=GBK" %>
(2)用这个转码:
String param= new String(request.getParameter("param").getBytes("ISO-8859-1"), "GBK");
(3)添加filter字符过滤器
(4)如果是通过"a.jsp?param=中文"传递参数,则需要:
a.在传参数之前先把参数进行转码:java.net.URLEncoder.encode(param);
取值用java.net.URLDncoder.decode(param);再转回中文
b.在你的Tomcat目录-->conf目录-->server.xml里找出这段:
<Connector
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" <!--在里边加上这个参数-->URIEncoding="gb2312"
/>
关键是第4步,添加URIEncoding="gb2312"
在Resin中,修改Resin.conf
<server>
......
<url-character-encoding>utf-8</url-character-encoding>
.......
</server>
因为,Resin decodes the URL before it dispatches to a <web-
app> to the <url-character-encoding> needs to be at the <server> level.