首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Struts2(JSP)的URL请求中文乱码有关问题

2012-12-28 
Struts2(JSP)的URL请求中文乱码问题Struts2(JSP)的URL请求中文乱码问题2009-6-8 星期一 雨今天下午刚好广

Struts2(JSP)的URL请求中文乱码问题

Struts2(JSP)的URL请求中文乱码问题
2009-6-8 星期一 雨

今天下午刚好广陵同学去面广西IBM,我就在他笔记本上试着解决上次没有解决的URL中文请求乱码问题。直到刚才才解决。不奇怪,因为中国人特有的问题一般是在网上找不到答案的。一搜,遇到同样问题的还真不少,给出解决方法的还不少,但是很多都是重复,贴来贴去的,说的头头是道,照着做就是不行。已经是见惯不怪了。
比如说使用Spring自带的charEncodingFilter不行,自己写了一个Filter也不行。总之试了很多方法,重启了无数次Tomcat,还是不行。
比如这篇: struts2中文乱码解决方法,似乎很有道理,但是照做还是不行。
不过有个很搞笑的现象,就是使用它介绍的最无奈的方法:

public class ConvertCharacter{        public String Convert(String s){            String result;            byte[] temp ;            try{                temp = s.getBytes("iso-8859-1");                result =  new String(temp,"utf-8");            }            return result;        }   }

发现在非IE内核的浏览器中是有效的,但是在IE内核的浏览器(比如Sogo),当传递的中文参数超过2个字就不行了。比如http://localhost:8080/JmsSyncSender/modifyUser?userId=Struts2(JSP)的URL请求中文乱码有关问题某人就可以,但是http://localhost:8080/JmsSyncSender/modifyUser?userId=Struts2(JSP)的URL请求中文乱码有关问题某某人,转换之后就是某某?乱码,也就是说从第三个字开始就是乱码了,太奇怪了,百思不得其解。

还是搜索一下英文吧,还真找的不错的文章。比如下面这篇:http://www.inter-locale.com/codeset1.jspStruts2(JSP)的URL请求中文乱码有关问题。不过它似乎跟上面那篇是一样的,只不过解释了为什么这么做的原因。

广陵回来后搜索到一篇文章,地址栏传值,中文乱码:
1.(方法一)
window.location=encodeURI(路径);

2.(方法二)tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码?
需在服务器server.xml中配置对应的端口中配置编码方式即可.例如:

"8080"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"               enableLookups="false" redirectPort="8443" acceptCount="100"               debug="0" connectionTimeout="20000"               disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>

中加入useBodyEncodingForURI="true" URIEncoding="UTF-8"就可以了.

使用第二种方法试了一下,将上面的转换类代码去掉,发现两者的效果是一样的。后者是有Tomcat帮我做了转换。这虽然方便了一些,但是还是没有解决IE内核浏览器的问题。

最后,我想是不是因为使用URL传值的问题呢?如果采用Form传值会怎样呢?于是试了一下,使用Hidden field,并使用

var txtUserId = document.getElementById("userId");   if(txtUserId!=null){       txtUserId.value= username;   }   document.listUserForm.action = "modifyUser";   document.listUserForm.submit();}

这下都可以了,深感欣慰。


热点排行