System.out.println的编码问题

源文件格式UTF8, System.out.println( "Hello World!天" ); 在cmd中显示汉字的编码过程 ? 我没找到一个说法,可以解释下面四个试验。

(试验1.chcp936,环境变量设utf8)

E:\hellojava>javac src/zhc/U8.java -d ./

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8

E:\hellojava>java zhc.U8

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8
Hello World!天
Charset.defaultCharset :UTF-8

(试验2.chcp65001,环境变量UTF8)

E:\mini\javaProj\hellojava>javac src/zhc/U8.java -d ./
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8

E:\mini\javaProj\hellojava>java zhc.U8
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8
Hello World!天��
Charset.defaultCharset :UTF-8

(试验3.chcp936,没有环境变量)


E:\hellojava>javac -encoding "utf-8" src/zhc/U8.java -d ./

E:\hellojava>java zhc.U8
Hello World!天
Charset.defaultCharset :GBK

(试验4.chcp65001,没有环境变量)

E:\hellojava>javac -encoding "utf-8" src/zhc/U8.java -d ./

E:\hellojava>java zhc.U8
Hello World!��
Charset.defaultCharset :GBK

结论:以上4个试验都是在win7下。
在win10下的情况也不正常,版本号14393之后是这样:都用defualtCharset:UTF8这个编码,不论chcp是936还是65001都能正确显示中英混排
image
在linux下是正常的,比如在国产系统深度下,用java_tool_opt控制编码,在终端右击可以切换编码。

阅读 1.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题