Charset.defaultCharset()和file.encoding有什么区别?

时间:2018-08-11 10:39:37

标签: java character-encoding

我在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

1 个答案:

答案 0 :(得分:1)

您从Charset.defaultCharset()获得的值就是JVM的开始。此后无法更改。

另一方面,可以更改系统属性,但是在各种JDK类中是否获得期望的效果则是另一回事。

为了使用不同的字符集,最好提供一个JVM参数,例如

java -cp <classpath> <package.classname> -Dfile.encoding=Big5