我在MS Windows 7上运行Java SE 8,并同时使用Eclipse和Netbeans。通过运行以下程序,我意识到两个表达式中每个表达式的返回值都不一样!
System.out.println(System.getProperty("file.encoding"));
System.out.printf(Charset.defaultCharset());
关于Charset.defaultCharset()时,它说“返回默认字符集”,而关于file.encoding,我们被告知“默认字符集保留在JVM的系统属性file.encoding中”。因此,似乎Charset.defaultCharset()必须完全返回存储在file.encoding中的内容。但是我意识到这不会发生!例如,如果我通过
更改file.encoding的内容System.setProperty("file.encoding", "Big5");
System.out.println(System.getProperty("file.encoding"));
它输出Big5,但
System.out.printf(Charset.defaultCharset());
仍会打印其先前的值(在Eclipse上它会打印Windows-1256,而在Netbeans中它会打印UTF-8)。您能解释一下它们到底是什么,在实践中它们之间有什么联系和区别。
版本:过了一会儿,我在此站点上发现了有关该主题的非常有用的内容,并且整个问题得以解决:
https://javarevisited.blogspot.com/2012/01/get-set-default-character-encoding.html?m=1
答案 0 :(得分:1)
您从Charset.defaultCharset()
获得的值就是JVM的开始。此后无法更改。
另一方面,可以更改系统属性,但是在各种JDK类中是否获得期望的效果则是另一回事。
为了使用不同的字符集,最好提供一个JVM参数,例如
java -cp <classpath> <package.classname> -Dfile.encoding=Big5