如何将任何UTF8字符串转换为可读字符串。
喜欢:â(在UTF8中)是€
我尝试使用Charset但没有工作。
答案 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。