出现这个问题分为两个部分: 一、 编译时编码错误 二、命令行编码无法显示中文而显示 “ ????”
原因:
一:编译时编码错误---编码GBK的不可映射字符
JDK默认国际版的,在编译未指定编码方式的时候,java.exe首先获得系统默认采用的编码格式,即操作系统的file.encoding参数(我国默认GBK),然后JDK就把JAVA源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放到内存中。之后,javac把转换后的UNICODE格式的文件进行编译成class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码编译后的.class文件保存到操作系统中形成我们见到的.class文件。但我们不加设置就编译时,相当于使用了参数:javac -encoding gbk xx.java,就会出现不兼容的情况。
我们使用了utf-8编辑.java, 但系统默认GBK,所以不兼容,报错
二 : 关于输出中文出现乱码 :这是命令行以GBK为默认,而.java中的字符以utf-8编码
解决方法
一: 编码GBK的不可映射字符
方法一:每次运行时改 javac xxx.java 为 javac -encoding UTF-8 xxx.java
方法二:更改环境变量 系统变量中新建“JAVA_TOOL_OPTIONS”变量,值为“-Dfile.encoding=UTF-8”,永久改变编码格式
二 : 命令行显示乱码:
修改cmd窗口字符编码为UTF-8,命令行中执行:chcp 65001
切换回中文GBK:chcp 936
剩余细节如改变字体请自行百度“命令行不能新显示中文”即可