2011-05-09 126 views
10

如何解碼android中的utf-8字符串?我嘗試用這個命令的輸出輸入它的相同,但是:字符串解碼utf-8

URLDecoder.decode("hello&//à", "UTF-8"); 

new String("hello&//à", "UTF-8"); 

EntityUtils.toString("hello&//à", "utf-8"); 
+0

該字符串不是在特定的編碼都沒有。這是什麼,你試圖解決的問題? 「解碼」是什麼意思?它是什麼編碼,你覺得呢? – BalusC 2011-05-09 22:34:10

回答

37

一個字符串不需要編碼。它只是一串Unicode字符。

您需要編碼當您想要將字符串轉換爲一個字節序列。您選擇的字符集(UTF-8,cp1255等)決定字符 - >字節映射。請注意,字符不一定會翻譯爲單個字節。在大多數字符集中,大多數Unicode字符都被轉換爲至少兩個字節。 String的

編碼通過如下進行:

String s1 = "some text"; 
byte[] bytes = s1.getBytes("UTF-8"); // Charset to encode into 

,當你有個字節的а序列,然後你把他們變成一個字符串你需要解碼。當你需要指定的時候,還需要指定這些字節最初編碼的字符集(否則你最終會得到精確的文本)。

解碼:

String s2 = new String(bytes, "UTF-8"); // Charset with which bytes were encoded 

如果你想了解這更好,一個偉大的文字是 「The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

4

的核心功能是getBytes(String charset)new String(byte[] data)。你可以使用這些函數來做UTF-8解碼。

UTF-8解碼實際上是一個字符串到字符串的轉換,中間緩衝區是一個字節數組。由於目標是UTF-8字符串,所以對於new String()的唯一參數是字節數組,其中呼叫是等於new String(bytes, "UTF-8")

然後,鍵是用於輸入的編碼串中的參數來獲取內部字節數組,你應該事先知道。如果你不這樣做,猜測最可能的,「ISO-8859-1」對英國用戶來說是一個很好的猜測。

解碼句話應該是

String decoded = new String(encoded.getBytes("ISO-8859-1"));