Dos窗口输出java语言中文怎么输出不了

输出数字和英文都可以正确输出,求解答。输入javac命令,也显示一堆问号,是不是javac.exe出错了呢

    Java编译器只支持ANSI编码的源文件,无论源文件有没有BOM,也无论源文件使用了什么编码,Java编译器都以ANSI编码的方式读取源文件(注意,含有BOM的源文件将出现编译错误,UTF-16编码的源文件也会出现编译错误)。这一点不同于C/C++编译器,VC和GCC编译器都支持含有BOM的UTF-8编码的源文件。(DOM?BOM!)

    Java编译器以ANSI(Windows简体中文版操作系统的ANSI编码为GBK)编码的方式读取Java源文件进行编译,将源代码中的字符串(String)和字符(char)以UTF-8的形式存储在生成的字节码.class文件中。(注意:根据JDK API文档,Java语言以UTF-16的形式表示字符和字符串。然而事实上,Java字节码文件却以UTF-8的形式存储字符和字符串。)

    源文件中使用UTF-8编码的字符串,调用println函数发往控制台的也是UTF-8编码的字符串;源文件中使用ANSI编码的字符串,调用println函数发往控制台的还是ANSI编码的字符串;

    为什么会乱码?因为DOS控制台并不像记事本那样能够自动识别字符串的编码,DOS控制台以预设的编码对字符串进行解析并加以显示。DOS中用于解析字符串的编码我们是可以自主设置的,在DOS窗口的标题栏右击,选择”默认值“,在对话框中的”默认代码页“中可以设置”GBK“或者”OEM-美国“为DOS默认的编码。你说的不错,DOS控制台确实不支持UTF-8的编码格式。

    为什么输出英文字符串就没问题?因为UTF-8字符集和ANSI字符集都是ASCII字符集的超集,使用无BOM的UTF-8保存Java源文件,非ASCII字符只可能出现在字符串或字符中,而不会出现在源文件的其他位置,所以编译器并不会报错。UTF-8编码一般使用三个字节表示中文字符,ANSI编码使用2个字节表示中文字符。你的推理能力很好很强大,UTF-8的英文编码与ANSI是完全一样的。

    BOM,Byte Order Mark,字节顺序标记。BOM其实很简单,就是文本文件开头的几个具有特殊含义的字节,例如,UTF-8的BOM是EF BB BF。以前文本文件是没有BOM的,以什么编码解析文本文件只能由文本编辑器自动判断,可是文本编辑器有时候会判断失误,使文本文件不能被正确读取。为了解决此问题,人们就发明了BOM,用BOM来标记文本文件使用的字符编码,这样文本编辑器就可以以BOM所代表的字符编码正确读取文本文档了。

    朋友,字符编码的知识一两句话是说不清楚的,需要自己努力的学习与体会。Java语言建立于虚拟机之上,即使从事Java开发多年的程序员,也未必精通字符编码的知识。

追问

怎么解决这个问题呢?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-21

单独打开cmd看看对不对?

代码页 是不是 936?英文是437,改成936就好了。

追问

是936

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网