2015-04-02 32 views
0

我在顯示「velar鼻子」字符(ŋ)時遇到了問題(但我認爲其他罕見字符會出現同樣的問題)。不顯示在html中的字符

我有一個MySQL表,其中包含這個字符的單詞。 當我的代碼檢索它以顯示在我的HTML頁面中時,它會顯示爲問號。

我已經嘗試了一些事情:使用MySQL的轉換爲檢索到的字符串轉換爲UTF-8,因爲我理解的是,字符串存儲在我的表作爲在「latin1」試過 1):

SELECT CONVERT(Name USING utf8) 

相反的:

SELECT Name 

這並沒有幫助,而且,當我在Java代碼保存在一個字符串有問題的話(「Yolŋu」),然後通過代碼剩下的問題傳遞的字符串仍然發生(即:問題不在於不同字符編碼,我的數據庫使用)。

2)我也嘗試創建從個字節的新的String:

new String(name.getBytes("UTF-8")); 

絃樂正在從Java通過傳遞給一個JavaScript文件一個JSONObject傳遞給HTML:

相關JSON代碼:

JSONArray names = new JSONArray(); 
     for (int iD: iDs) 
     { 
      JSONObject namesData = new JSONObject(); 
      String name = NameDB.getNameName(iD); 
      nameData.put("label", name); 
      nameData.put("value", iD); 
      names.put(nameData); 
     } 
     return names; 

相關servlet代碼:

response.setContentType("application/json"); 

     try (PrintWriter out = response.getWriter()) 
     { 
      out.print(namesJSONArray); 
     } 

相關的js代碼:

ajax對servlet的調用是通過jquery ui的自動完成「源」選項完成的。

我對編碼一般很陌生,對字符編碼主題也很新穎。

謝謝。

回答

0

首先,在Java中String應該已經擁有正確的Unicode,所以new String(string.getBytes(...), ...)是一個破解,有自己的麻煩。

1.數據庫

如果數據庫舉行UTF-8文本這將是很好。編碼可以在數據庫,表和列級別上設置。首先要調查如何存儲文本。錶轉儲(mysqldump)最不容易出錯。

如果您可以使用UTF-8,則必須在數據庫引擎上設置MySQL的形式,併爲java驅動程序進行數據傳輸。

在每一種情況下,您都可以通過填充表格字段並再次讀取來檢查java JDBC中的往返行程,同時還可以讀取現有的麻煩字段。

轉儲字符串的代碼點。

String dump(String s) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < s.length();) { 
     int cp = s.codePointAt(i); 
     if (32 < cp && cp < 128) { 
      sb.append((char) cp); 
     } else { 
      sb.append("U+").append(Integer.toHexString(cp)); 
     } 
     sb.append(' '); 
     i += Character.charCount(cp); 
    } 
    return sb.toString(); 
} 

2.輸出

這裏可能在於錯誤。在開始時調用:

response.setCharacterEncoding("UTF-8"); 
... response.getWriter(); // Now converts java's Unicode text to UTF-8. 

對於HTML字符集規範也是如此。特別是當HTML頁面被保存到文件系統時,編碼頭將會丟失。

+0

太好了。點數(2)做到了。小改正:該方法被稱爲「setCharacterEncoding」。 – theyuv 2015-04-03 08:47:04

+0

更正爲其他訪客。 – 2015-04-07 06:34:00

0

你應該保證對下面的事情:

  1. 你的JVM必須file.encoding=UTF-8 PARAM
  2. 你的MySQL表,其中包含特殊字符必須用encoding=UTF-8
  3. 您的Web UI被參數應指定工作帶有編碼的元標記已將網頁保存在編輯器中,所以UTF-8

如果問題仍然存在sts,請嘗試使用HTML entities(&entity)