问题

在 win7 下使用 javac 指令编译 Java 文件,当源码中包含中文(包括注释)时,编译会失败,并报错 ??? Cp1252 ???

使用的 shell 为 git-bash,jdk 1.8。

解决

针对 Java 编译中文报错,网上的解决方案,大多为编译时携带指定编码参数。

因为 Windows 默认环境为 ANSI ( Cp1252 ) 编码,默认编译出来的字节码也是 Cp1252。当然这是在编译的时候就失败了。

javac -encoding utf-8 HelloWorld.java

没有起作用,再尝试换成 gbk。

javac -encoding gbk HelloWorld.java

依然没有用。好奇当前环境到底是什么编码,就去 查看操作系统当前使用的字符集(字符编码)

在 git-bash 下属于 linux 指令环境,使用 echo $LANG,得到以下结果:

$ echo $LANG
zh_CN.UTF-8@cjknarrow

这就奇怪了,当前的 shell 环境是 utf-8,那就不应该会有中文乱码问题。

猜测这个 utf-8 只是在使用 git-bash 的时候起作用,并且只是展示时的编码,真正的系统字符集并没有改变。

打开 控制面板 -> 时钟、语言和区域 -> 更改显示语言,系统会弹出 “区域和语言” 选择框。

格式标签下,选择 “中文(简体,中国)”;
位置标签下,当前位置选择 “中国”;
管理标签下,非 Unicode 程序语言块下,更改系统区域设置选择 “中文(简体,中国)”。若对系统区域设置做了修改,可能会提示你重启系统,点击立即重启就好。

我在重启系统后,再次去 git-bash 下编译 Java ,成功输出中文!

若此时 git-bash 仍然报错 Cp1253,可以添加编译参数 -encoding utf-8,或者使用开发工具(例如:VSCODE)或者 IDE(例如:IntelliJ IDEA)。