linux日志乱码本质是编码不匹配,需依次排查终端编码、系统locale、日志程序配置及文件本身编码:一、终端设utf-8;二、locale启用zh_cn.utf-8;三、tomcat/journalctl/logback等按需配utf-8;四、用file/enca/vim验证并iconv转码。

Linux日志乱码本质是编码不匹配,不是文件损坏,关键要理清“谁用什么编码写”和“谁用什么编码读”。排查时按顺序检查:终端显示层 → 系统语言环境 → 日志源程序配置 → 日志文件本身编码。
一、先看终端是否支持中文显示
很多乱码其实卡在终端这一关。Xshell、SecureCRT、GNOME Terminal 或 Windows 自带的 PowerShell/WSL 终端,都必须设置为 UTF-8 编码(除非你明确用 GBK 环境):
- Xshell:【文件】→【属性】→【终端】→【编码】选 UTF-8
- SecureCRT:【Options】→【Session Options】→【Terminal】→【Appearance】→【Character Encoding】选 UTF-8
- GNOME Terminal 或 Xterm:右键 → Preferences → Profiles → Text → Character encoding → Unicode (UTF-8)
- Windows 命令行(cmd):运行 chcp 65001 切换为 UTF-8(临时生效);PowerShell 默认已支持 UTF-8,但需确认 $OutputEncoding = [System.Text.UTF8Encoding]::new()
二、检查系统 locale 是否启用中文 UTF-8
系统级语言环境决定大多数命令(如 ls、date、journalctl)输出的默认编码。乱码常因 locale 是 C 或 POSIX(纯 ASCII)导致:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 运行 locale 查看当前设置,重点看 LANG 和 LC_ALL
- 若输出类似 LANG=C,说明没启用 UTF-8 中文支持
- 临时生效:export LANG=zh_CN.UTF-8
- 永久生效(Ubuntu/Debian):sudo dpkg-reconfigure locales → 勾选 zh_CN.UTF-8 → 设为默认
- 永久生效(CentOS/RHEL):sudo localectl set-locale LANG=zh_CN.UTF-8
三、定位日志来源并检查其编码配置
不同日志来源处理方式不同,不能一概而论:
- Tomcat 控制台日志:修改 $CATALINA_HOME/conf/logging.properties,将 java.util.logging.ConsoleHandler.encoding = UTF-8(确保与终端一致);避免改成 GBK,否则跨平台易出问题
- systemd journal 日志:默认 UTF-8,但若用 journalctl -o json 导出再查看,需确保解析工具也用 UTF-8 读取
-
Java 应用自定义日志(Log4j/Logback):检查 appender 的 encoding 参数,例如 Logback 的
UTF-8 - 脚本 echo 输出日志:确保脚本文件本身是 UTF-8 编码保存,并在开头加 #!/bin/bash 后不加 BOM;避免用 echo "中文" > log.txt 后用 GBK 编辑器打开
四、验证和转换日志文件本身的编码
如果日志已落盘为文件(如 catalina.out、app.log),可直接检查其真实编码:
- 用 file --mime-encoding 文件名 或 enca -L zh 文件名(需安装 enca)粗略判断
- 用 iconv -f GBK -t UTF-8 原文件 > 新文件 尝试转码(注意先备份)
- 用 Vim 打开后执行 :set fileencoding? 查看识别编码;若错,可用 :set fileencoding=utf-8 + :w 强制另存
- Notepad++ 用户:右下角看编码,右键可“转为 UTF-8 编码”或“以 UTF-8 格式编码”保存










