我有一個奇怪的編碼情況,即html頁面本身顯示爲它應該(所有accénted字符正確顯示),但所有彈出dojo對話框無法使用正確編碼。編碼「主」頁面和dojo對話框之間的差異
下面是設置:
- 與Tomcat6.0.18運行休眠/彈簧/ Struts2的的Java Web項目;頁面生成爲JSP tile,由Tiles2組裝在一起。
- 所有的源文件都是UTF-8編碼,,除了用於ISO-8859-1(按照Java規範)的資源屬性文件(
*.properties
)。 - 數據庫採用UTF-8編碼。
struts.xml
包含常量的定義:<constant name="struts.i18n.encoding" value="UTF-8"/>
每個JSP瓦的聲明
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
每一個JSP頁面(幾個瓦片構成)開始啓動與聲明
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> <?xml version="1.0" encoding="UTF-8"?>
每個HTML頁面生成從JSP代碼d包含以下
<head>
元標記:<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
一個Tomcat編碼過濾器設置報頭
every single request going through Tomcat
爲值:text/html;charset=UTF-8
道場1.2.3上的每個被初始化用語句頁面
<script type="text/javascript" src="/scripts/dojo/dojo/dojo.js" djConfig="parseOnLoad:true,usePlainJson:true,locale:'fr'"></script>
一個
dijit.Dialog
首先創建,然後通過開下面的語句(在/votingOptions
動作URL返回遵循同樣規格的前一個JSP片斷---即JSP片斷結束嵌入對話框<div>
內):dialog = new dijit.Dialog({title:"My title",loadingMessage:"Loading..."}); dialog.setHref('/votingOptions'); dialog.show();
結果在所有設置中,所有「常規」頁面(即擱置dojo對話框)都會顯示所有字符,重音和所有字符,無論文本來自數據庫還是來自資源文件。
另一方面,任何dojo對話框的內容都會變形:所有非重音字符都可以,但重音字符的顯示方式與正在嘗試讀取UTF-8字符的重音字符顯示爲ISO-8859- 1個(不管這些字符來自數據庫還是來自資源文件)。
因此,例如,名稱爲「哥德爾」(因爲它會正確顯示在主頁上)將在道場對話框中顯示爲「庫爾特Gödel」!
注意,螢火報告在這兩種情況下送達的Tomcat相同的響應報頭(是否調用主網頁,或者,一旦在頁面上,打開一個道場對話框):
Server: Apache/2.2.3 (CentOS)
Content-Language: en-US
Connection: close
Content-Type: text/html;charset=UTF-8
之間的唯一區別這兩種類型的請求(除了內容長度)爲:
Transfer-Encoding: chunked
請求的主網頁但在道場-對話框的情況下不存在時,其存在。
任何人都可以判斷到目前爲止我逃脫了什麼?或者,對於我應該執行的這種偵查來說,建議是值得歡迎的!