如何将任何 UTF8 字符串转换为可读字符串。
喜欢:â¬(在 UTF8 中)是 €
我尝试使用 Charset 但不工作。
如何将任何 UTF8 字符串转换为可读字符串。
喜欢:â¬(在 UTF8 中)是 €
我尝试使用 Charset 但不工作。
您正在将字符串编码为 ISO-8859-15 ,byte[] b = "Üü?öäABC".getBytes("ISO-8859-15");
然后您将使用 UTF-8 对其进行解码System.out.println(new String(b, "UTF-8"));
。您必须以与 ISO-8859-15 相同的方式对其进行解码。
您正在尝试使用“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
这不是“UTF-8”,而是完全损坏且无法修复的数据。字符串没有编码。在这种情况下说“UTF-8”字符串是没有意义的。String 是一串抽象字符 - 它没有任何编码,除了作为内部实现细节,这不是我们关心的并且与您的问题无关。
java中的字符串已经是一个unicode表示。当您在其上调用其中一个getBytes方法时,您将获得特定编码的编码表示(作为字节,因此是二进制值) - 在您的示例中为 ISO-8859-15。如果您想将此字节数组转换回 unicode 字符串,您可以使用接受字节数组的字符串构造函数之一来执行此操作,就像您所做的那样,但您必须使用与最初生成字节数组完全相同的编码来执行此操作。只有这样,您才能将其转换回 unicode 字符串(没有编码,也不需要编码)。
请注意无编码方法,包括字符串构造函数和 getBytes 方法,因为它们使用运行代码的平台的默认编码,这可能不是您想要实现的。
我认为这里的问题是您假设 java String 是使用您在构造函数中指定的任何内容进行编码的。 它不是。 它采用 UTF-16 格式。
因此,"Üü?öäABC".getBytes("ISO-8859-15")
实际上是将 UTF-16 字符串转换为 ISO-8859-15,然后获取其字节表示。
如果您想在 Eclipse 控制台中获得人类可读的格式,只需保持原样(在 UTF-16 中) - 并调用System.out.println("Üü?öäABC")
,因为您的 Eclipse 控制台将解码字符串并将其显示为 UTF-16。