2011-05-09 113 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"));