2013-03-22 60 views
-2

我想對JAVA中的字符串「Dürrnerstrasse1 Postfach 1463,D-8800 Ansbach」執行utf-8編碼以避免特殊字符。UTF編碼java

有人可以在這裏分享代碼嗎?

String s = rs.getString("address"); 
byte [] b = s.getBytes("UTF-8"); 
String newString = new String(b,"UTF-8"); 

它仍然是相同的轉換

+0

[你有什麼嘗試](http://whathaveyoutried.com)? – tjameson 2013-03-22 06:33:17

+1

你是什麼意思?目前還不清楚是否要避免使用特殊字符,因此音譯(ö到oe)或編碼爲UTF-8(從ISO 8859-1開始看起來好像).... – Naytzyrhc 2013-03-22 06:38:10

+0

String add = rs.getString(「address」); String value = new String(add.getBytes(「UTF8」)); System.out.println(value); – Veeresh 2013-03-22 06:38:50

回答

2

後您的字符串已經是UTF-8,但在ISO-8859-1編碼:

   // D  ü  r r n e r s t r a s s e 
byte[] rawdata = {68, -61, -68, 114, 114, 110, 101, 114, 115, 116, 114, 97, 115, 115, 101}; 
        // 0xC3, 0xBC = "ü" in UTF-8 
String s = new String(rawdata, "ISO-8859-1"); // this is what your rs.getString() returns 
System.out.println(s); 

結果

Dürrnerstrasse 

如果要重新解釋/重新編碼字符串s作爲UTF-8,則需要使用適當的源編碼,然後重新使用UTF-8的目標編碼字符串:

byte[] stream = s.getBytes("ISO-8859-1"); 
String s2 = new String(stream, "UTF-8"); 
System.out.println(s2); 

結果

Dürrnerstrasse 

在一個側面說明,假設rs是一個JDBC結果,你也應該考慮配置您的數據庫客戶端/驅動程序正確 - 如果您的數據庫已經使用UTF-8,驅動程序應該能夠正確地返回編碼的字符串,以便您不需要在應用程序中重新編碼它們。

+0

他的數據庫必須從字面上包含亂碼。只要字符集包含被編碼的字符(否則你會得到'?'),你使用什麼驅動編碼並不重要。它只會影響性能。 – Esailija 2013-03-22 17:50:21