java - 谁将 JVM file.encoding 重置回原始值?

标签 java encoding character-encoding jar jvm

System.setProperty("file.encoding", "utf-8");

下面的评论暗示 file.encoding 将针对在同一 JVM 上运行的所有应用程序进行更改,但是,我没有观察到这种行为。

Setting a system property programmatically will affect all code running within the same JVM, which is hazardous, especially when discussing such a low-level system property.

我已阅读此问题并了解缓存和 Java 1.5 存在许多问题
Setting the default Java character encoding?

现在请考虑以下代码:

public class FileEncodingTest {
    public static void main (String[] args) {
        System.out.println(System.getProperty("file.encoding"));
        System.setProperty("file.encoding", "UTF-8");
        System.out.println(System.getProperty("file.encoding"));
    }
}

然后我使用项目配置中设置的 Eclipse 和 Java 1.6 创建一个 jar 文件。
然后我使用 Java 1.7 运行 jar 文件,这一切都发生在 Windows 7 下。

java -jar FileEncodingTest.jar
Cp1251
UTF-8

java -jar FileEncodingTest.jar
Cp1251
UTF-8

那么谁以及为什么将 file.encoding 的值重置回 Cp1251

UPD: 任何人都可以解释或提供一个链接,逐步解释当我输入 java -jar MyClass.jar 时 JVM 会发生什么?

最佳答案

您启动了 2 个虚拟机。每个“java -jar”命令都有一个。

您可以通过在 Eclipse 中编辑项目属性来更改项目使用的编码。

但请注意,当您对依赖于文件格式的内容进行硬编码并且另一个项目使用您的实现时,将会出现问题。这就是评论的意思。

关于java - 谁将 JVM file.encoding 重置回原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621582/

相关文章:

java - JFX8 混合 2D 和 3D,场景子场景不正确的绘图 3ds 文件

Android PDF Writer(APP) 编码

mysql - INSERT 值是否使用 SET NAMES、SET CHARACTER SET 编码?

Java AES/CFB8/NoPadding 加密和字符集

character-encoding - 带有 0D 0D 0A 换行符的文本文件

java - 将 logging.properties 文件更改为 Slf4j 中的不同路径

java - 如何使用JGit查找提交距离?

php - 简体中文字符显示为问号菱形

java - 如何在JPanel中添加图片

php - 使用 symfony3 : Catchable Fatal Error: Argument 3 passed to 编码密码