【问题标题】:Internal character encoding of Java 7Java 7 的内部字符编码
【发布时间】:2012-11-14 15:35:58
【问题描述】:

据我所知,当 JRE 执行 Java 应用程序时, 该字符串将在内部被视为 USC2 字节数组。 在wikipedia可以找到以下内容。

Java 最初使用 UCS-2,并在 J2SE 5.0 中添加了 UTF-16 补充字符支持。

随着 Java (Java 7) 的新发布版本, 它的内部字符编码是什么?
Java有没有可能在内部开始使用UCS-4?

【问题讨论】:

    标签: java character-encoding ucs2 utf-32


    【解决方案1】:

    Java 7 内部仍然使用 UTF-16 (Read the last section of the Charset Javadoc),并且不太可能更改为 UCS-4。我给你两个理由:

    1. 从 UCS-2=>UCS-4 更改很可能意味着他们必须将 char 原语从 16 位类型更改为 32 位类型。回顾过去 Sun/Oracle 对向后兼容性的重视程度,这样的改变不太可能发生。
    2. 在大多数用例中,UCS-4 比 UTF-16 编码的字符串占用更多的内存。

    【讨论】:

    • 故事并不是那么简单:您可以在 Java 中执行 UTF-32。看看我下面的帖子。或谷歌JSR-204,或Java UTF-32 support
    • 您当然可以在 Java 中对字符串进行编码和解码到 UTF-32 或从 UTF-32 解码。但这并不意味着 Java 使用 UTF-32 作为字符串的内部表示。
    • UTF-32 是一种字符编码,可将一系列字符转换为字节序列。它没有说明 Java 将如何在内部处理 Unicode。我怀疑 Java 是否会因为它的编码从 UCS-2 转移,这对于大多数用途来说都很好。最大的危险是如果存在 UCS-4 代码页,那么大多数 Java 代码会错误地将字符串的长度视为字符数。它是否会迭代字符串并正确处理代码页是值得怀疑的。
    【解决方案2】:

    问:据我所知,当 JRE 执行 Java 应用程序时,字符串 将被视为(16 位 Unicode)字节数组

    答:是的

    问:随着 Java 的新发布版本(Java 7),它是什么? 内部字符编码?

    答:一样

    问:Java内部有没有可能开始使用UCS-4?

    A:我没听说过这种情况

    但是,您可以在 Java 5 及更高版本中使用“代码点”来实现 UTF-32 字符:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 2013-11-10
      相关资源
      最近更新 更多