字符串解码utf-8

问题描述 投票:16回答:3

如何使用Android解码utf-8字符串?我尝试使用此命令,但输出与输入相同:

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

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

EntityUtils.toString("hello&//à", "utf-8");
java android
3个回答
43
投票

字符串不需要编码。它只是一个Unicode字符序列。

您需要编码要将字符串转换为字节序列。您选择的字符集(UTF-8,cp1255等)确定了Character-> Byte映射。请注意,字符不必转换为单个字节。在大多数字符集中,大多数Unicode字符都转换为至少两个字节。

字符串的编码是通过:

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

您需要decode,当您有一个字节序列并且想要将它们转换为字符串时。当您再次需要指定字节的原始编码字符集时(否则,您将得到乱码)。

解码:

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!)


5
投票

核心功能是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"));

0
投票

尝试查看decode string encoded in utf-8 format in android,但您的字符串看起来没有任何特殊编码。您认为输出应该是什么?

© www.soinside.com 2019 - 2024. All rights reserved.