System. setProperty("file.编码","utf-8");
下面的注释暗示file.编码将针对在同一JVM上运行的所有应用程序进行更改,但是,我没有观察到这种行为。
以编程方式设置系统属性将影响在同一JVM中运行的所有代码,这是危险的,尤其是在讨论这种低级系统属性时。
我已经阅读了这个问题,并了解缓存和Java有很多问题1.5
设置默认Java字符编码?
请现在考虑以下代码:
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创建一个jar文件,并在项目配置中设置Java1.6。
然后我用1.7Java运行jar文件,所有这些都发生在Windows 7下。
java -jar FileEncodingTest.jar
Cp1251
UTF-8
java -jar FileEncodingTest.jar
Cp1251
UTF-8
那么是谁以及为什么将file.编码
的值重置回Cp1251
?
UPD:任何人都可以解释或提供一个链接,一步一步地解释在JVM方面发生了什么,当我输入java-jarMyClass. jar
?
您启动了2个vm。一个带有每个“java-jar”命令。
您可以通过在eclipse中编辑项目属性来更改项目使用的编码。
但是请注意,当您硬编码依赖于文件格式的东西并且另一个项目使用您的实现时,会出现问题。这就是注释的意思。
就像你打开一个IE浏览器,它首先进入主页。如果你访问另一个网站,然后你打开另一个IE,它仍然是主页。JVM非常相似。java程序的2个不同进程使用不同的JVM。这意味着当程序结束时,文件编码属性将再次默认。