gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:21 24 4
gpt4 key购买 nike

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

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

最佳答案

源文件的 ASCII 是因为在当时期望人们拥有完全支持 Unicode 的文本编辑器被认为是不合理的。此后情况有所改善,但仍不完美。 Jave 中的整个 \uXXXX 本质上是 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 代码单元)。

关于java - 为什么 Java 生态系统在其整个软件堆栈中使用不同的字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3240498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com