gpt4 book ai didi

Java 源文件 - 编译后编码是否仍然相关?

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:17 26 4
gpt4 key购买 nike

我知道在 Java 中加载文件而不指定要使用的编码是平台相关的。但我的问题是关于 .java 源文件本身中包含的文本:用于这些文件的编码是否仍然相关一旦编译

例如,如果我在 Windows 上有一个 test.java 文件,它是 Cp1252 编码并包含:

private String encodingTest = "Bœuf fûmé";

如果我使用 -encoding Cp1252 编译它,那么在生成的 .class 中这段文本究竟会发生什么?编码仍然重要吗?还是Java在编译的时候把编码标准化了?

生成的 .class 是否依赖于平台?如果我在 Windows、Linux、Solaris 上输出此文本,是否会得到不同的结果?服务器上的编码配置是否会以某种方式影响此文本的呈现?

最佳答案

正如 OP 在他的帖子中所说,源代码编码在编译时非常相关。但是在编译之后,所有文字文本都存储为(修改后的)UTF-8 编码字符串。

所有字符串字面量、类/方法/字段名称和对它们的引用都以UTF-8编码存储在.class文件的常量池中:

From the JVM spec (for Java version 1.7) :

4.4.7. The CONSTANT_Utf8_info Structure

The CONSTANT_Utf8_info structure is used to represent constant string values:

[...]

String content is encoded in modified UTF-8. Modified UTF-8 strings are encoded so that code point sequences that contain only non-null ASCII characters can be represented using only 1 byte per code point, but all code points in the Unicode codespace can be represented.

因此,一旦您的源代码被编译,它就会以已知的字符编码 (UTF-8) 存储,您不再需要指定源文件编码。

总的来说,第4.4 of the JVM specification节解释常量池如何工作,以及字符串、类/字段/方法名称等由 CONSTANT_Utf8_info 结构表示。

关于Java 源文件 - 编译后编码是否仍然相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23843737/

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