在 CentOS 上编译 Java 出现乱码,通常是 系统字符集、JDK 字符集、源码文件编码不一致 导致的。下面按常见原因给你一套排查和解决方案。
| 原因 | 表现 |
|---|---|
| 系统语言环境不是 UTF-8 | javac 编译中文注释/字符串乱码 |
| 源码文件不是 UTF-8 | 编译或运行时中文乱码 |
| JDK 默认编码不是 UTF-8 | 编译期或运行期乱码 |
| 终端编码不一致 | 控制台输出乱码 |
locale
如果看到类似:
LANG=en_US
LC_ALL=
或不是 UTF-8,就可能有问题。
✅ 推荐结果:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
java -XshowSettings:properties -version 2>&1 | grep file.encoding
或:
javac -version
如果不是 UTF-8,编译中文就会乱码。
localectl set-locale LANG=en_US.UTF-8
或直接修改:
vi /etc/locale.conf
加入:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
然后:
source /etc/locale.conf
重启或重新登录。
javac -encoding UTF-8 *.java
✅ 这是解决乱码最直接的方法
如果是 Maven 项目:
mvn clean compile -Dfile.encoding=UTF-8
java -Dfile.encoding=UTF-8 Main
file Hello.java
如果不是 UTF-8,转换:
iconv -f GBK -t UTF-8 Hello.java -o Hello_utf8.java
或用 vim:
:set fileencoding=utf-8
:wq
在 pom.xml 中加:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
如果是 终端显示乱码:
export LANG=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
写入:
~/.bashrc
CentOS 编译 Java 乱码,99% 是编码不一致导致的,统一使用 UTF-8 即可解决。
如果你愿意,可以把:
发给我,我可以帮你精准定位 ✅