日期:2014-05-20  浏览次数:20561 次

中文乱码问题,jsp页面get方法传递奇数个中文字符时出现乱码,偶数时正常
JSP页面的 <a     href= "special_productList.do?username=${username   }&&author=${td.author}&&imageName=${td.imageName} "   > </a> 调用了action类,其中有用到的代码如下:

struts的action文件为:
response.setContentType( "text/html;charset=UTF-8 ");
String   username   =   request.getParameter( "username ");
String   author   =   request.getParameter( "author ");
String   imageName   =   request.getParameter( "imageName ");
当author   或imageName的中文为偶数时,debug显示为正确中文,中文个数为奇数时,debug显示这两个参数的中文的最后一个为“口”乱码,
之前的中文为正确显示,就是最后一个乱码。非常的奇怪,偶数中文个数不乱,奇数中文个数只乱最后一个字符,不知有人知道没有?谢谢!
另我在TOMCAT   5.5.23中的SERVER.XML的两个Connector都配置了URIEncoding=“UTF-8”,其他的包括源文件,JSP页面,XML一律用了UTF-8编码。

------解决方案--------------------
<%@ page language= "java " pageEncoding= "UTF-8 " contentType= "text/html; charset=UTF-8 " />

request.setCharacterEncoding( "UTF-8 ");
response.setContentType( "text/html; charset=UTF-8 ");

jsp页面加点料试试
------解决方案--------------------
String author =new String(author, "gb2312 ");
或用过滤器
------解决方案--------------------
<%@ page pageEncoding= "UTF-8 " contentType= "text/html;charset=UTF-8 "%>
<%request.setCharacterEncoding( "UTF-8 ");%>
<%@ page session= "true " %>
============================================================
<%@ page pageEncoding= "UTF-8 " contentType= "text/html;charset=UTF-8 "%>
<%
request.setCharacterEncoding( "UTF-8 ");
response.setContentType( "text/html; charset=UTF-8 ");
%>
<%@ page session= "true " %>
------解决方案--------------------
传递前先encode
------解决方案--------------------
这种情况一般发生在 IE 身上,传参前将该中文字符使用 URLEncoder.encode( <你的参数内容> , "UTF-8 ") 进行处理一下,再进行传递基本上就可以解决了。在 Firefox 身上基本上不会发生,因为它会自动将非 ISO-8859-1 字符转为该字符的表现形式。

别忘了导入 <%@ page import= "java.net.URLEncoder " %> 包。
------解决方案--------------------
把你在容器中做的设置URIEncoding=“UTF-8”去掉试试,然后
字符转码或写个字符过滤器统一管理
------解决方案--------------------
那你就使用 JSTL 的 c 标签试试看:

<c:url value= "special_productList.do " var= "redirect ">
   <c:param name= "username " value= "${username} "/>
   <c:param name= "author " value= "${td.author} "/>
   <c:param name= "imageName " value= "${td.imageName} "/>
</c:url>
<a href= "${redirect} " > XXXX </a>

这样会根据你的页面的编码自动转换了。
------解决方案--------------------
谢谢楼上的各位,我的问题刚刚解决的,或者说是逃避了这个乱码。
我贴出来和大家分享,以后碰到此问题的朋友也可以参考下:
在页面上加上 :function onEscape(username,author,imageName){

window.location.href= "special_productList.do?username= "+username+ "&author= "+escape(escape(author))+ "&imageName= "+escape(escape(imageName));
}
然后调用此函数即可。
此函数利用escape来转码成UNICODE,然后再转一次(这点请不要忽略),然后再写一个Escape类来把JS传过来的参数转码回来,具体这个类是怎么写的,可以google一次,必有。
要注意的是JS必须用window.location.href,如果用location.href()的话,IE支持,但FireFox不支持。