有次在项目中遇到在一个servlet从URL中传递一个参数(中文)到另一个servlet中,这时会出现URL乱码问题,经过查找资料及代码调试,最后终于找到了问题所在。先分享给大家
第一个servlet
String word = request.getParameter("word");
if(Tools.isNotEmpty(word))
{
word=new String(word.getBytes("ISO-8859-1"), "utf-8");
}
另一个 servlet
String word = request.getParameter("word");
结果这个是word是乱码
解决方法一:
我们注意到使用req.getParameter("key")得到参数后,还使用了new String(key.getBytes("ISO-8859-1", "utf-8"))把ISO-8859-1字符集形式转换成UTF-8形式。
为什么呢?因为iso-8859-1是Java中网络传输使用的标准字符集,req.getParameter("key")得到的还是ISO-8859-1字符集,所以要转换一下才不会是乱码。
解决方法二:
在服务的server.xml 中增加以下配置:
<!-- A HTTP/1.1 Connector on port 8080 -->
<Connector protocol="HTTP/1.1" port="${jboss.web.http.port}" address="${jboss.bind.address}"
redirectPort="${jboss.web.https.port}" />
修改为:
<Connector protocol="HTTP/1.1" port="${jboss.web.http.port}" address="${jboss.bind.address}"
redirectPort="${jboss.web.https.port}" URIEncoding="UTF-8"/>
增加编码
--------JVM编码设置---------------------
1、JVM中缺省字符集
或者在环境变量中配置JAVA_OPTS=%JAVA_OPT%;-Dfile.encoding=UTF-8 -Duser.language=zh_CN
或者在Tomcat的启动脚本中配置JAVA_OPTS=%JAVA_OPT%;-Dfile.encoding=UTF-8 -Duser.language=zh_CN