我对我的 jsp 页面使用了所有“utf-8”编码。
我使用 struts2 作为我的 web 框架并在 tomcat 上运行它。
最近发现部分汉字是乱码,其余的正常。
请看下面的图片:
这张图片是关于输出html源代码的。这里链接的data-tmpl属性的内容必须和上面的div内容一致。
但事实并非如此,而且有部分内容是乱码。
下面是jsp代码:
页面编码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
上图的逻辑代码:
<div class="float-left ${st.odd?'odd':'even'}" >
${template }【${signNoBracket }】
</div>
<a class="sms-editor-select-tmpl float-right" data-tmpl="${template }" data-sign="${signNoBracket }" href="###" style="display:none;">使用</a>
<p class="clear"></p>
此 jsp 页面由父 jsp 页面包含:
<s:include value="/controls/2.0/sms-editor.jsp"></s:include>
通过使用 EL 表达式,'template' 的 ref 都是相同的。
那么为什么会发生这种情况呢?tomcat输出编码有问题吗?
添加于 2013-11-1 0:25:02
大家好,这几天我做了一些实验,发现是tomcat或者struts框架导致出现这个问题。
我用jsp脚本代替el表达式,问题依旧。
以下是一些代码快照:
<%
ValueStack vs = TagUtils.getStack(pageContext);
Object value = vs.findValue("template");
System.out.println(value);
%>
<a class="sms-editor-select-tmpl float-right" data-tmpl="<%=value %>" data-sign="${signNoBracket }" href="###" style="display:none;">使用</a>
而且我可以在tomcat控制台看到println的值,和我们预期的一样正常。所以,tomcat的汉字输出流肯定有一些bug。
tomcat的输出(很正常):
#收货人#您好,看到您给的中差评,抱歉让您有了不满意的购物经历。若可以我们愿意承担运费为您提供退货,希望旺旺联系我们!
我在两个版本的tomcat上测试我的应用程序,他们都有这个问题。一个是 apache-tomcat-6.0.30 ,另一个是 apache-tomcat-7.0.47 。
那么,有没有机构可以帮我解决这个问题?或者只是给我指路。
现在我尝试使用jetty 9.0.6来运行我的应用程序,问题仍然存在......谁能告诉我到底是什么......
OTL orz !!!