温馨提示×

nodejs日志 linux编码异常

小樊
41
2026-10-14 09:31:06
栏目: 编程语言

你这个问题比较简短,我分几种常见场景给你说明,基本能覆盖 90% 的 Node.js 在 Linux 下“日志编码异常”的情况。


一、常见现象

  • 日志中出现乱码(如 中文)
  • 控制台中文正常,写文件乱码
  • 日志中中文变成 ? 或 \uXXXX
  • Docker / SSH 登录后日志编码不对

二、最常见原因

1️⃣ Linux 系统 locale 不是 UTF-8

Node.js 默认使用系统 locale。

查看:

locale

如果不是 UTF-8(如 C 或 POSIX),就会乱码。

✅ 解决:

sudo apt install locales
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

重启服务或终端。


2️⃣ Node.js 读取/写入文件未指定编码

❌ 错误:

fs.writeFileSync('log.txt', '中文日志')

✅ 正确:

fs.writeFileSync('log.txt', '中文日志', 'utf8')

读取也一样:

fs.readFileSync('log.txt', 'utf8')

3️⃣ 日志库默认编码问题(winston / pino)

部分日志库写文件时不强制 UTF-8,依赖系统。

✅ winston 示例:

const transport = new winston.transports.File({
  filename: 'app.log',
  options: { encoding: 'utf8' }
})

4️⃣ Docker 容器未设置 locale(非常常见)

Docker 默认是 C

✅ Dockerfile:

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

或:

ENV LANG=zh_CN.UTF-8

5️⃣ 终端 / SSH 客户端编码不对

  • SecureCRT / Xshell:设置 UTF-8
  • VS Code 终端:UTF-8
  • echo $LANG 应为 *.UTF-8

三、快速自查清单 ✅

echo $LANG
node -e "console.log('中文测试')"

如果:

  • 终端正常,文件乱 → 文件编码问题
  • 都乱 → locale 问题
  • Docker 乱 → 容器 locale 问题

四、如果你愿意

你可以直接贴:

  1. 日志示例(乱码截图或文本)
  2. 用的日志库(console / winston / pino)
  3. 是否在 Docker
  4. Linux 发行版

我可以精准定位并给你最小修改方案。

0 踩