我有以下课程:
public class PrintCharSet{
public static void main(String[] args){
System.out.println("System Props (file.encoding): " + System.getProperty("file.encoding"));
System.out.println("Default Charset: " + java.nio.charset.Charset.defaultCharset());
}
}
当我在My Linux上运行时,我得到了:
$ java PrintCharSet
System Props (file.encoding): UTF-8
Default Charset: UTF-8
当我通过file.encoding prop为这样的JVM指定一个有效的字符集时,它可以工作:
$ java -Dfile.encoding=WINDOWS-1256 PrintCharSet
System Props (file.encoding): WINDOWS-1256
Default Charset: windows-1256
但问题是,当我使用无效的字符集名称时,为什么我没有得到一些初始化错误而不是使用默认值(就好像我为file.encoding道具提供空值以指示初始化阶段的问题)
$ java -Dfile.encoding=INALID_CHARSET_NAME PrintCharSet
System Props (file.encoding): INALID_CHARSET_NAME
Default Charset: UTF-8
答案 0 :(得分:0)
此行为定义不明确,sun / oracle将其视为内部实现细节。根据sun / oracle的说法,“更改VM和运行时系统使用的默认编码的首选方法是在启动Java程序之前更改底层平台的语言环境。”