【发布时间】:2012-11-29 08:25:55
【问题描述】:
System.setProperty("file.encoding", "utf-8");
下面的评论暗示 file.encoding 将针对在同一 JVM 上运行的所有应用程序进行更改,但是,我没有观察到这种行为。
以编程方式设置系统属性会影响在同一 JVM 中运行的所有代码,这是很危险的,尤其是在讨论这种低级系统属性时。
我已阅读此问题并了解缓存和 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-file,这一切都发生在 Windows 7 下。
java -jar FileEncodingTest.jar
Cp1251
UTF-8
java -jar FileEncodingTest.jar
Cp1251
UTF-8
那么是谁以及为什么将file.encoding 的值重置回Cp1251?
统一更新:
任何人都可以解释或提供一个链接,逐步解释当我键入java -jar MyClass.jar 时在 JVM、进程方面会发生什么?
【问题讨论】:
-
在一个 JVM 中更改系统属性不会影响其他 JVM。
-
@ThorbjørnRavnAndersen,所以为每个
java -jar创建一个单独的 JVM 实例? -
对于典型的 Oracle/IBM Java 发行版,是的。
标签: java encoding character-encoding jar jvm