【问题标题】:UTF-8 in Java's String.GetBytes(Charset)Java 的 String.GetBytes(Charset) 中的 UTF-8
【发布时间】:2016-02-14 20:52:43
【问题描述】:

我阅读了一些关于 Java 中 String.getBytes(Charset) 方法的文档。

用于将String转换为字节数组(字节类型可以取值-2^7到2^7-1)。

据我所知,UTF-8 字符集中的每个字符可以使用 1-4 个字节。如果 UTF-8 字符集中的字符编码大于 2^7-1 会怎样?

我试过了

String s="Hélô"

然后我得到了这样的'HélÃ'':

String sr=new String(s.getBytes("UTF-8"),Charset.forName("UTF-8"));

我希望它返回原始值“Hélô”。

谁能描述一下?谢谢。 (对不起我的英语)

【问题讨论】:

  • 应该没问题。您确定原始字符串是合适的吗?如果你有 UTF-8 源代码但编译为 ISO-8859-1,你会得到那个结果。我建议您制作一个简短但完整的程序来演示问题,包括证明结果不等于源字符串。

标签: java encoding utf-8 character-encoding


【解决方案1】:

正如 Jon 已经说过的,原因是您使用了不同的编码。在 UTF-8 编码中,字符 éô 分别被编码为两个字节。

ISO-8859-1: H  é  l ô
     bytes: 48 E9 6C F4

UTF-8     : H  é    l  ô
     bytes: 48 C3A9 6C C3B4

您的错误字符串结果示例如下所示

UTF-8 bytes interpreted as ISO-8859-1
H  Ã  ©  l  Ã  ´
48 C3 A9 6C C3 B4

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 2014-05-16
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2019-11-29
    • 2012-02-22
    相关资源
    最近更新 更多