2011-01-27 57 views
0

我們構建了一個java ee web項目並使用jdbc存儲我們的數據。 問題是,德國的'Umlaute'像äöü正在使用並正確存儲在mysql數據庫中。我們不知道爲什麼,但在瀏覽器中這些字符被打破,顯示像Java EE Web項目和字符編碼

ö� 

,而不是怪異的東西。 我已經嘗試過類似的設置在這個問題上所描述的JDBC連接的編碼:

JDBC character encoding

和HTML網頁的編碼設置正確:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 

任何想法如何修復?


更新

connection.prepareStatement("SET CHARACTER SET utf8").execute(); 

不會讓變音工作。 改變了元標記

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

不會改變任何東西,也

回答

1

「我們不知道爲什麼,但在瀏覽器中那些字符被打破」

那麼,這是首先要弄清楚的。你應該在每一個階段跟蹤你的數據:

  • 當你取出來的數據庫(日誌記錄)的
  • 當你把它注射到頁面(伐木)
  • 在電線(通過Wireshark

當您登錄時,不要只記錄字符串:將構成字符串的Unicode字符記錄爲整數。只需將字符串中的每個字符都轉換爲整數並記錄下來。這很原始,但它會告訴你你需要知道什麼。

當你在電線上看,當然,你會看到字節,而不是像這樣的字符。您應該計算出您所選編碼的字節數,然後檢查這些數據是否與實際通過網絡傳輸的數據相對應。

您已經在HTML中指定了編碼 - 但是您是否告訴您在ISO拉丁文1中生成您想要的頁面?這很可能導致設置內容類型標頭執行從文本到字節的實際轉換。

此外,是否有任何理由你爲什麼使用ISO拉丁文1而不是UTF-8?你爲什麼要故意限制自己? (ISO Latin 1只能處理Unicode的前256個字符,而不是Unicode字符的全部範圍,UTF-8可以處理所有事情,並且對於ASCII碼也是一樣高效。)

+0

那麼,我會嘗試與伐木。我使用標準的servlet和一些標籤。 – phineas 2011-01-27 17:41:07