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
时的流程会发生什么?
答案 0 :(得分:1)
您可以通过在eclipse中编辑项目属性来更改项目使用的编码。
但请注意,当您对依赖于fileformat的内容进行硬编码而另一个项目使用您的实现时会出现问题。这就是评论意味着什么。
答案 1 :(得分:1)
就像你打开一个IE浏览器一样,它首先会进入主页。如果你访问另一个网站,然后你打开另一个IE,它仍然是主页。 JVM非常相似。 2个不同的java程序进程使用不同的JVM。这意味着当程序结束时,文件编码属性将再次默认。