在 CentOS 上用 Java 编译出现乱码,通常是系统字符集、文件编码、javac 编码参数不一致导致的。下面按常见场景给你一套处理方案。
locale
如果看到类似:
LANG=
LC_ALL=
或不是 UTF-8,就容易乱码。
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
永久生效(推荐):
vi /etc/profile
添加:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
然后:
source /etc/profile
如果系统没有
zh_CN.UTF-8,需要:
localedef -i zh_CN -f UTF-8 zh_CN.UTF-8
你的 .java 文件必须是 UTF-8(或你指定的编码)
查看文件编码:
file -i Test.java
如果不是 UTF-8,可转换:
iconv -f GBK -t UTF-8 Test.java -o Test_utf8.java
javac -encoding UTF-8 Test.java
如果是 GBK 文件:
javac -encoding GBK Test.java
✅ 这是解决乱码最直接的方法
java -Dfile.encoding=UTF-8 Test
pom.xml 中指定:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
| 现象 | 原因 |
|---|---|
| 编译时中文注释乱码 | javac 未指定 -encoding |
| 运行时日志乱码 | -Dfile.encoding 未设置 |
| SecureCRT/Xshell 显示乱码 | 终端编码非 UTF-8 |
| Windows 写文件 CentOS 编译乱码 | GBK → UTF-8 未转换 |
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
javac -encoding UTF-8 *.java
java -Dfile.encoding=UTF-8 Main
如果你愿意,可以把:
locale 输出.java 文件来源(Windows / Mac / Git)发给我,我可以帮你精确定位。