为什么 Java 生态系统在整个软件堆栈中使用不同的字符编码?

2024-02-13

例如,类文件使用 CESU-8(有时也称为 MUTF-8),但 Java 内部首先使用 UCS-2,现在使用 UTF-16。关于有效 Java 源文件的规范规定,最小符合标准的 Java 编译器只需接受 ASCII 字符。

这些选择的原因是什么?在整个 Java 生态系统中使用相同的编码不是更有意义吗?


源文件使用 ASCII 是因为当时人们认为期望人们拥有完全支持 Unicode 的文本编辑器是不合理的。此后情况有所改善,但仍然不完美。整体\uXXXXJave 中的 thing 本质上是 Java 中 C 的三字母的等价物。 (当创建 C 时,某些键盘没有大括号,因此您必须使用三字母!)

在创建 Java 时,类文件格式使用 UTF-8,运行时使用 UCS-2。 Unicode 的代码点少于 64k,因此 16 位就足够了。后来,当额外的“平面”被添加到 Unicode 中时,UCS-2 被(几乎)兼容的 UTF-16 取代,UTF-8 被 CESU-8 取代(因此“兼容性编码方案...”)。

在类文件格式中,他们希望使用 UTF-8 来节省空间。类文件格式(包括 JVM 指令集)的设计非常注重紧凑性。

在运行时,他们希望使用 UCS-2,因为他们认为节省空间比避免处理可变宽度字符更重要。不幸的是,现在它是 UTF-16,这种事与愿违,因为一个代码点现在可以采用多个“字符”,更糟糕的是,“char”数据类型现在有点错误命名(一般来说,它不再对应于一个字符,但是相反,对应于 UTF-16 代码单元)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Java 生态系统在整个软件堆栈中使用不同的字符编码? 的相关文章

随机推荐