1

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

喜欢:â¬(在 UTF8 中)是 €

我尝试使用 Charset 但不工作。

4

5 回答 5

1

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

于 2013-02-22T08:18:03.740 回答
1

您正在尝试使用“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
于 2013-02-22T08:18:30.960 回答
1

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

于 2013-02-22T08:19:39.180 回答
1

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

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

于 2013-02-22T08:21:37.357 回答
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。

于 2013-02-22T08:22:00.117 回答