谁重置JVM file.encoding回原始?

时间:2012-11-29 08:25:56

标签: java encoding character-encoding jar jvm

  

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

下面的评论表明,对于在同一JVM上运行的所有应用程序,都会更改file.encoding,但是,我没有观察到这种行为。

  

以编程方式设置系统属性将影响在同一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文件,所有这些都发生在Windows 7下。

java -jar FileEncodingTest.jar
Cp1251
UTF-8

java -jar FileEncodingTest.jar
Cp1251
UTF-8

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

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

2 个答案:

答案 0 :(得分:1)

你开始2伏特了。每个“java -jar”命令一个。

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

但请注意,当您对依赖于fileformat的内容进行硬编码而另一个项目使用您的实现时会出现问题。这就是评论意味着什么。

答案 1 :(得分:1)

就像你打开一个IE浏览器一样,它首先会进入主页。如果你访问另一个网站,然后你打开另一个IE,它仍然是主页。 JVM非常相似。 2个不同的java程序进程使用不同的JVM。这意味着当程序结束时,文件编码属性将再次默认。