繁体   English   中英

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

[英]Convert UTF-8 encoded string to human readable string

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

像:â€(在UTF8中)是€

我尝试使用Charset,但无法正常工作。

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

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

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

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

您正在尝试对以“ ISO-8859-15”和“ UTF-8”格式编码的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

我认为这里的问题是,您假设使用构造函数中指定的内容对java String进行编码。 不是。 在UTF-16中。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM