2013-03-25 78 views
1

我有一個基於Spring MVC的Java webapp。我有一些數據以日文字體顯示。我做了一些在線研究,並注意到UTF-8是我需要的字符編碼。我將下面的代碼添加到我的應用程序中。它所做的只是將charset編碼添加到響應標頭。日文字體在Unix上運行時沒有正確顯示

response.setCharacterEncoding("UTF-8"); 

當我在Windows 7上測試時,日文字體顯示正常。

當我在Unix機器上運行同一個戰爭文件時,我只看到這些字符: 和數字(如果有的話)。我在Chrome Debugger中檢查了響應頭,我仍然看到UTF-8編碼。

我在頭文件信息中看到的唯一區別是windows有Apache-Coyote/1.1服務器,而unix上有apache服務器。

有些人可以建議我還需要檢查什麼?

+1

您是否檢查過Apache的'server.xml'來查看URIencoder是否設置爲UTF8?如果不將此行添加到連接器標籤:'<連接器URIEncoding =「utf-8」.... />'。 – ye9ane 2013-03-25 15:18:34

+0

我加了。沒有變化 – javaMan 2013-03-25 18:28:34

回答

2

問題可能在於如何創建字符串。它是從文件中讀取的嗎?

如果是這樣,文件本身就有一個編碼,您可能會根據默認的平臺編碼讀取它。如果文件採用一種編碼,但是您在另一種編碼中讀取,則字符串中的文本將不正確。

使用調試/日誌記錄進行快速檢查是字符串的長度。如果它在Windows上報告一個長度,在Unix上報告另一個長度,那麼在生成字符串時可能會出現編碼錯誤。一個例子是UTF-8中的一個字符被解釋爲ISO-8859,並且您看到類似這樣的內容: -

在這種情況下,您會希望字符串的長度爲1,但它具有長度爲3.如果該內容嵌入其他文本中,即使文本應該相同,也會在長度上看到差異2。

+0

我從sql數據庫中獲得。我不是從檔案中讀取。我所看到的都是unix中的這些字符。 – javaMan 2013-03-25 15:12:57

+2

哦。然後這個答案完全脫離基礎。 「?」字符表示您的字體沒有要求顯示的日文字形。嘗試使用不同的字體,特別是您知道包含日文字形的字體。 – 2013-03-25 15:38:13

+0

你可以給我一些更詳細的信息,我怎麼可以嘗試不同的字體。我不知道 – javaMan 2013-03-25 16:17:54