在 CentOS 下 Java 编译出现乱码,通常是系统字符集、终端字符集、Java 文件编码不一致导致的。可以按下面步骤排查和解决。
locale
正常应类似:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果不是 UTF-8,建议修改为 UTF-8:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
永久生效(CentOS 7):
localectl set-locale LANG=zh_CN.UTF-8
查看文件编码:
file -i YourFile.java
如果是 iso-8859-1 或 gbk,而终端是 UTF-8,就会乱码。
javac -encoding UTF-8 YourFile.java
✅ 这是最推荐、最稳妥的方式
javac -encoding GBK YourFile.java
运行 Java 程序时也建议指定:
java -Dfile.encoding=UTF-8 YourClass
如果你用:
:set fileencoding=utf-8
❌ 文件是 GBK,但系统 UTF-8,没指定编码:
javac Test.java
✅ 正确:
javac -encoding GBK Test.java
✅ 编译不乱码三步走:
javac -encoding UTF-8如果你愿意,可以把:
locale 输出file -i xxx.java 结果发给我,我可以帮你精准定位。