在 CentOS 上 Java 编译或运行出现乱码,通常是 系统字符集、文件编码、JVM 编码不一致 导致的。下面按「原因 → 解决方案」系统说明。
locale
常见正常结果:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果是:
POSIX
C
或没有 UTF-8,就容易乱码。
localectl set-locale LANG=zh_CN.UTF-8
vi /etc/locale.conf
内容:
LANG=zh_CN.UTF-8
然后:
source /etc/locale.conf
✅ 重新登录或重启
Java 默认使用 系统编码,CentOS 经常不是 UTF-8。
javac -encoding UTF-8 *.java
✅ 如果是 Maven / Gradle:
Maven
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Gradle
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
java -Dfile.encoding=UTF-8 Main
✅ 推荐写成启动脚本:
java -Dfile.encoding=UTF-8 -jar app.jar
file -i Test.java
如果不是 UTF-8:
iconv -f GBK -t UTF-8 Test.java -o Test_utf8.java
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
如果是 日志框架(logback / log4j):
<encoder>
<pattern>%d %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
✅ 系统 locale = UTF-8
✅ javac -encoding UTF-8
✅ java -Dfile.encoding=UTF-8
✅ 源文件是 UTF-8
✅ 终端是 UTF-8
你可以告诉我:
我可以直接给你 针对性命令。