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编码。
21 个解决方案
你给的信息比较少,td是什么,还有action里面怎么写的
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" />
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
jsp页面加点料试试
不好意思,下面是我相关的jsp代码
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
<%request.setCharacterEncoding("UTF-8");%>
<%@ page session="true" %>
<!-- begin iterator -->
<logic:present name="list">
<% int i=0; %>
<logic:iterate id="tr" name="list" length="2">
<table width="684" border="0" cellspacing="3"
cellpadding="0">
<tr>
<!-- begin td -->
<% String j=i+""; %>
<logic:iterate id="td" name="list" length="4"
offset="<%=j %>">
<td width="176">
<table width="135" border="0" cellspacing="0"
cellpadding="0">
<!--DWLayoutTable-->
<tr>
<td height="11">
<img
src="../myspace/images/my-product_01.gif"
width="135" height="11">
</td>
<td width="14"></td>
</tr>
<tr>
<td height="157" valign="bottom" width="135"
background="../myspace/images/my-product_02.gif">
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" %>
这种情况一般发生在 IE 身上,传参前将该中文字符使用 URLEncoder.encode(<你的参数内容>,"UTF-8") 进行处理一下,再进行传递基本上就可以解决了。在 Firefox 身上基本上不会发生,因为它会自动将非 ISO-8859-1 字符转为该字符的表现形式。
别忘了导入 <%@ page import="java.net.URLEncoder" %> 包。
bao110908(好没劲~~) 确实是个不错的建议,不过我这个页面的功能的中文是按循环变化的,
URLEncoder.encode(“”,“UTF-8”)可以把中文解决,但是必须要在URL中写入<%=URLEncoder.encode(XXX,"UTF-8")%>,而xxx必须是在类如<% String xx=request.getAttribute(xx)%>中定义取得的,这就不能满足我的需求了,曾想过在<%=URLEncoder.encode(XXX,"UTF-8")%>的xxx换成EL表示来满足需求,但不成功,好像《%%》不支持EL,所以URIEncoding不能采用,只能靠link后面加?xx=yy来传中文,且不能没有想到办法Encode它,不知道各位明白我的意思没有,郁闷阿,知不知道如何解决此乱码问题。。。
把你在容器中做的设置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不支持。
再次谢谢楼上各位!!
用两次 escape?
用 JavaScript 的 encodeURI 更好一些。
to: xiaoxing0820
JavaScript 函数
encodeURI 正解 escape 在JS中不再建议使用
最终的办法要编码和解码
java.net.URLEncoder.encode(),java.net.URLDncoder.decode
http://blog.csdn.net/hiyu2218/archive/2007/12/12/1931160.aspx
我的博客文章中给出了我自己的解决方案,可做参考