file.encoding system 属性 in Java 在不同的 JVM 实例中给出不同的结果

file.encoding system property in Java giving different results in different instances of JVM

我在 Centos 6.6 上 运行 Java 7。我在显示 UTF-8 的独立 tomcat 服务器实例中检查了 file.encoding 系统 属性。我在显示 ANSI_X3.4-1968 的嵌入式 tomcat 中检查了相同的内容。这两个实例都没有为 file.encoding.

使用任何命令行参数

谜团是为什么 JVM 仅在嵌入式 tomcat 中推断 ANSI_X3.4-1968?在所有其他情况下,它会根据我的区域设置正确推断 UTF-8

Java(不是 Tomcat)如果未在命令行中给出,则自动设置 file.encoding。它将使用环境变量,例如 locale 来制定适当的设置。

例如,我的语言环境是 en_GB.UTF-8,所以我的 file.encoding 解析为 UTF-8

"embedded" 实例可能没有获得完整的环境上下文,因此无法达到与独立实例相同的设置。

有关嵌入式实例的更多信息可能有助于阐明更多信息。

如果您始终希望将 file.encoding 设置为 UTF-8,则必须使用此选项启动 JVM:

-Dfile.encoding=UTF-8

任何对启动 JVM 的特定环境的依赖都是不可靠的。