在 CentOS 上 Java 日志出现乱码,通常不是 Java 本身的 bug,而是字符编码不一致导致的。下面按“常见原因 → 原理 → 解决办法”说明。
CentOS 默认可能是:
LANG=en_US(无 UTF-8)LANG=zh_CN.GBKLANG=C而 Java 默认会用系统编码。
查看当前编码
locale
echo $LANG
如果看到:
LANG=en_US
LC_CTYPE="C"
就很容易乱码。
✅ 解决:
export LANG=zh_CN.UTF-8
# 或
export LANG=en_US.UTF-8
Java 源码是 UTF-8,但运行时用了 GBK。
查看 Java 默认编码
java -XshowSettings:properties -version 2>&1 | grep encoding
或代码里:
System.out.println(Charset.defaultCharset());
✅ 解决(推荐):
java -Dfile.encoding=UTF-8 -jar app.jar
如 Logback / Log4j2
<encoder>
<pattern>%d %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
❌ 没写 charset → 用系统编码
<PatternLayout charset="UTF-8" pattern="%d %msg%n"/>
比如:
vim / less / Windows 记事本 用 GBK 打开✅ 验证:
file log.txt
✅ 正确打开方式:
vim log.txt
:set encoding=utf-8
✅ 解决:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
java -Dfile.encoding=UTF-8 -jar app.jar
明确指定 UTF-8
locale 是否 UTF-8-Dfile.encoding如果你愿意,可以把:
发出来,我可以直接帮你定位到具体哪一层出的问题。