Linux 日志出现乱码,通常不是“日志本身坏了”,而是字符编码、终端环境、或记录来源不一致导致的。下面按常见原因逐步说明:
很多老系统或 Windows 程序生成的日志是 GBK / GB2312,而 Linux 默认是 UTF-8。
例如:
cat /var/log/app.log
# 输出:䏿–‡ä¹±ç
验证编码:
file -i app.log
解决方法:
iconv -f gbk -t utf-8 app.log
或
less -r app.log
如:
解决:
Window → Translation → UTF-8Session Options → Terminal → Appearance → UTF-8locale
如果看到:
LANG=C
LC_ALL=
解决:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
并确保已安装:
locale -a | grep zh_CN
例如 Java:
java -Dfile.encoding=UTF-8 -jar app.jar
Python:
import sys
sys.stdout.reconfigure(encoding='utf-8')
例如:
表现形式:
^@^@^@^@
解决:
strings app.log
有些“乱码”其实是:
容器里是 C,宿主机是 UTF-8
docker run -e LANG=zh_CN.UTF-8 ...
file -i 日志文件
locale
echo $LANG
如果你愿意,可以:
我可以更精确判断是哪一种乱码。