在 CentOS 上 Java 编译出现乱码,通常不是 Java 本身的 bug,而是字符编码环境不一致导致的。下面从原因 → 常见场景 → 解决办法系统说明。
Java 编译(javac)时涉及 三个编码环节:
当这三者不一致时,就会出现:
老 CentOS(如 6)默认:
LANG=zh_CN.GBK
或
LANG=C
而你的 Java 文件是 UTF-8,javac 按 GBK 读取 → 乱码。
✅ 检查:
locale
比如:
✅ 显式指定编码可解决:
javac -encoding UTF-8 Test.java
Windows 默认:
结果:
✅ 解决:
file Test.java
iconv -f GBK -t UTF-8 Test.java > Test_utf8.java
即使代码能编译,运行后输出也可能乱码。
Java 运行时:
java -Dfile.encoding=UTF-8 Test
sudo localectl set-locale LANG=zh_CN.UTF-8
# 或
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
永久生效:
/etc/locale.conf
javac -encoding UTF-8 *.java
Maven 项目:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
file *.java
IDE 中设置:
locale
file YourFile.java
javac -encoding UTF-8 YourFile.java
java -Dfile.encoding=UTF-8 YourClass
CentOS 上 Java 编译乱码,99% 是因为“文件编码、系统编码、javac 编码”三者不一致,统一成 UTF-8 即可解决。
如果你愿意,可以把:
locale 输出贴出来,我可以帮你精准定位。