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

Java 将UTF-8编码字符串转换为人类可读字符串,java,utf-8,character-encoding,ascii,decode,Java,Utf 8,Character Encoding,Ascii,Decode,如何将任何UTF8字符串转换为可读字符串 比如:UTF8中的–是€ 我尝试使用字符集,但不起作用。您正在使用字节[]b=Üü?öäABC.getBytesISO-8859-15将字符串编码为ISO-8859-15;然后使用UTF-8 System.out.printlnnew Stringb,UTF-8;对其进行解码;。您必须以与ISO-8859-15相同的方式对其进行解码。您正在使用字节[]b=Üü?öäABC.getBytesISO-8859-15将字符串编码为ISO-8859-15;然后使

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

比如:UTF8中的–是€


我尝试使用字符集,但不起作用。

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

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

您正在尝试解码使用UTF-8格式的ISO-8859-15编码的字节数组

        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格式的ISO-8859-15编码的字节数组

        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字符串是没有意义的。字符串是一个抽象字符字符串-除了作为内部实现细节之外,它没有任何编码,这不是我们关心的问题,也与您的问题无关。

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

java中的字符串已经是unicode表示形式。当你调用其中一个getBytes方法时,你会得到一个编码的字节表示,从而得到特定编码的二进制值——在你的例子中是ISO-8859-15。如果要将此字节数组转换回unicode字符串,可以使用一个接受字节数组的字符串构造函数(如您所做的),但必须使用与最初生成字节数组的编码完全相同的编码。只有这样,您才能将其转换回unicode字符串,该字符串没有编码,也不需要编码


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

java中的字符串已经是unicode表示形式。当你调用其中一个getBytes方法时,你会得到一个编码的字节表示,从而得到特定编码的二进制值——在你的例子中是ISO-8859-15。如果要将此字节数组转换回unicode字符串,可以使用一个接受字节数组的字符串构造函数(如您所做的),但必须使用与最初生成字节数组的编码完全相同的编码。只有这样,您才能将其转换回unicode字符串,该字符串没有编码,也不需要编码


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

我认为这里的问题是,您假设java字符串是使用构造函数中指定的任何内容编码的。不是。它是UTF-16

因此,Üü?öäABC.getBytesISO-8859-15实际上是将UTF-16字符串转换为ISO-8859-15,然后获得该字符串的字节表示形式


如果您想在Eclipse控制台中获得人类可读的格式,只需保持UTF-16中的状态,并调用System.out.printlnÜüäABC,因为Eclipse控制台将解码该字符串并将其显示为UTF-16。

我认为这里的问题是,您假设java字符串是用构造函数中指定的任何内容编码的。不是。它是UTF-16

因此,Üü?öäABC.getBytesISO-8859-15实际上是将UTF-16字符串转换为ISO-8859-15,然后获得该字符串的字节表示形式


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

您想实现什么?字符串从何而来?我只想将UTF8格式的不可读字符串转换为可读取字符串ASCII或其他可读字符集。我从其他问题中得到了这些类型的字符串,这些问题不是UTF-8,而是完全破坏和不可修复的数据。字符串没有编码。无法将–转换为€。不过,您可以将–转换为欧元。。。但是你不需要这样做,只要你一开始不把编码搞砸。你想达到什么目的?字符串从何而来?我只想将UTF8格式的不可读字符串转换为可读取字符串ASCII或其他可读字符集。我从其他问题中得到了这些类型的字符串,这些问题不是UTF-8,而是完全破坏和不可修复的数据。字符串没有编码。无法将–转换为€。您可以将–转换为?