为什么UTF-8在运行时用于类文件和UTF-16?

Jer*_*y_W 9 java encoding

为什么.class是UTF-8,但运行时.class是UTF-16?

在此输入图像描述

Joe*_*Joe 6

为什么.class是UTF-8

对于为西方受众编写的课程(通常主要是ASCII),这是最紧凑的编码.

但运行时.class是UTF-16?

在运行时,操作使用固定宽度编码的字符串(为什么Java char使用UTF-16?)会更快,因此选择了UCS-2.从UCS-2到UTF-16的变化使得这另一个可变宽度编码变得复杂.

正如该问题的评论中所指出的,JEP 254允许运行时表示变为更节省空间的东西(例如,Latin-1).


Mar*_*oun -1

源代码可以有任何编码,您还可以使用标志告诉编译器使用什么编码-encoding

JVM 使用 UTF-16,并在JLS中指定:

Java 编程语言使用 UTF-16 编码以 16 位代码单元序列表示文本。