将UTF-8编码的字符串转换为人类可读的字符串

时间:2013-02-22 08:09:59

标签: java utf-8 character-encoding ascii decode

如何将任何UTF8字符串转换为可读字符串。

喜欢:â(在UTF8中)是€

我尝试使用Charset但没有工作。

5 个答案:

答案 0 :(得分:1)

您正在使用byte[] b = "Üü?öäABC".getBytes("ISO-8859-15");将字符串编码为ISO-8859-15,然后使用UTF-8 System.out.println(new String(b, "UTF-8"));对其进行解码。您必须使用ISO-8859-15以相同的方式对其进行解码。

答案 1 :(得分:1)

这不是“UTF-8”,而是完全破坏和无法修复的数据。字符串没有编码。在这种情况下说“UTF-8”字符串是没有意义的。 String是一串抽象字符 - 它没有任何编码,除非作为我们关注的内部实现细节,与您的问题无关。

答案 2 :(得分:1)

java中的字符串已经是unicode表示。当您在其上调用其中一个 getBytes 方法时,您将获得特定编码中的编码表示(作为字节,因此为二进制值) - 在您的示例中为ISO-8859-15。如果要将此字节数组转换回unicode字符串,可以使用其中一个字符串构造函数来接受字节数组,就像您一样,但必须使用完全相同的编码字节数组最初是用。只有这样你才能将它转换回unicode字符串(没有编码,也不需要编码)。

请注意无编码方法,包括字符串构造函数和getBytes方法,因为它们使用运行代码的平台的默认编码,这可能不是您想要实现的。

答案 3 :(得分:0)

您正在尝试使用“UTF-8”格式解码使用“ISO-8859-15”编码的byteArray

        b = "Üü?öäABC".getBytes("ISO-8859-15");
        u = "Üü?öäABC".getBytes("UTF-8");

    System.out.println(new String(b, "ISO-8859-15")); // will be ok
    System.out.println(new String(b, "UTF-8")); // will look garbled
    System.out.println(new String(u,"UTF-8")); // will be ok

答案 4 :(得分:0)

我认为这里的问题是你假设java String是用你在构造函数中指定的任何东西编码的。 不是。它是UTF-16。

因此,"Üü?öäABC".getBytes("ISO-8859-15")实际上是将UTF-16字符串转换为ISO-8859-15,然后获取该字节表示。

如果你想在Eclipse控制台中获得人类可读的格式,只需保持原样(UTF-16) - 并调用System.out.println("Üü?öäABC"),因为你的Eclipse控制台将解码字符串并显示它作为UTF-16。