【问题标题】:string decode utf-8字符串解码 utf-8
【发布时间】:2011-05-09 22:17:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 那个字符串根本不是特定的编码。它是什么,您要解决的问题是什么? “解码”到底是什么意思?你觉得它是什么编码的?
  • 尝试使用局部变量来保存结果。例如:String str = URLDecoder.decode("hello&//à", "UTF-8");

标签: java android


【解决方案1】:

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

当你想把一个字符串变成一个字节序列时,你需要编码。您选择的字符集(UTF-8、cp1255 等)决定了 Character->Byte 映射。请注意,字符不一定翻译成单个字节。在大多数字符集中,大多数 Unicode 字符至少被转换为两个字节。

字符串的编码是由:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-05-09
        • 1970-01-01
        • 2022-11-12
        • 2012-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-05
        相关资源
        最近更新 更多