在 CentOS 上 Java 日志出现乱码,通常是字符编码不一致导致的。下面按常见原因和解决办法逐步说明。
cat / less 看是乱码)Java 默认编码可能使用了 ANSI_X3.4-1968 或 GBK
echo $LANG
locale
在 启动脚本 / java 命令 中加参数:
java -Dfile.encoding=UTF-8 -jar yourapp.jar
如果是 Tomcat:
# catalina.sh
JAVA_OPTS="-Dfile.encoding=UTF-8"
locale
如果不是 UTF-8,例如:
LANG=zh_CN.GBK
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
永久生效:
vim /etc/locale.conf
LANG=zh_CN.UTF-8
如果你是用 Xshell / SecureCRT / PuTTY:
✅ Xshell 示例:
属性 → 终端 → 编码 → UTF-8
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<PatternLayout charset="UTF-8" pattern="%d %p %c{1.} %m%n"/>
如果是历史日志文件:
file app.log
如果是 GBK:
iconv -f GBK -t UTF-8 app.log > app_utf8.log
echo $LANG 是 UTF-8-Dfile.encoding=UTF-8你可以贴:
locale 输出我可以精确帮你定位是哪一层出的问题。