2013-10-30 51 views
1

我爲我的jsp頁面使用了所有「utf-8」編碼。tomcat輸出一些垃圾字符

我用struts2作爲我的web框架並在tomcat上運行它。

最近,我發現部分漢字亂碼,其餘部分正常。

PLZ一起來看看下面的圖片:

enter image description here

這幅畫是關於輸出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表達式,'模板'的引用都是相同的。

那麼爲什麼會發生這種情況呢? 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。

那麼,有沒有任何機構可以幫助我解決這個問題?或者只是告訴我方式。


現在我嘗試碼頭9.0.6運行我的應用程序,這個問題依然存在....誰能告訴我到底怎麼....

OTL orz !!!

+0

你跟着http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8的每一步? –

+0

亂碼數據來自哪裏?你確定當你把它放到模板中時它不會被亂碼嗎? –

+0

@PhilippReichart數據不會出現亂碼,因爲鏈接上方div的內容也來自el表達式$ {template}的相同模板。 – jiacheo

回答

0

試試這個在您的Tomcat的server.xmlcontext.xml可以幫助:

<Connector port="8080" ... useBodyEncodingForURI="true"... 
+0

我試過這個,但問題仍然存在。 – jiacheo