在 CentOS 中出现 message 乱码(如 /var/log/messages、终端输出、系统日志等),通常是字符编码不一致或终端/系统语言环境未正确设置导致的。下面按常见场景逐步排查和解决。
locale
正常应类似:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果看到:
LANG=C
或包含 POSIX、ASCII,就容易出现乱码。
locale -a | grep zh_CN
如果没有 zh_CN.utf8,安装语言包:
CentOS 7
yum install -y kde-l10n-Chinese
yum reinstall -y glibc-common
CentOS 8 / Stream
dnf install -y langpacks-zh_CN
localectl set-locale LANG=zh_CN.UTF-8
或手动修改:
vi /etc/locale.conf
内容:
LANG=zh_CN.UTF-8
重新登录或重启。
即使系统正常,终端编码不对也会乱码。
例如:
Window → Translation → UTF-8属性 → 终端 → 编码 → UTF-8file /var/log/messages
如果是:
ASCII text
说明日志不是中文乱码,而是程序输出本身就是英文或非 UTF-8。
vi /etc/rsyslog.conf
添加:
$ActionFileDefaultTemplate RSYSLOG_FileFormat
重启:
systemctl restart rsyslog
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
例如某些程序输出:
�������
通常是:
可用:
iconv -f GBK -t UTF-8 file.log
✅ 90% 情况:终端编码不是 UTF-8
✅ 其次:系统 LANG 不是 zh_CN.UTF-8
✅ 少数:日志源程序编码非 UTF-8
如果你能补充:
我可以给你更精准的一行命令解决方案。