温馨提示×

nodejs日志乱码ubuntu为什么

小樊
43
2026-10-03 13:37:47
栏目: 编程语言

在 Ubuntu 上运行 Node.js 程序时出现日志乱码,通常不是 Node.js 本身的问题,而是字符编码 / 终端环境不一致导致的。下面按常见原因逐一说明。


一、最常见原因:终端编码不是 UTF-8

Ubuntu 终端默认应是 UTF-8,但如果:

  • 使用 SSH 连接(尤其是 Windows 客户端)
  • 修改过 LANG / LC_* 环境变量
  • 容器(Docker)未设置语言

就容易出现乱码。

检查当前编码

locale

正常应看到:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

如果看到 POSIX 或 C,就会乱码。

解决

sudo apt install locales
sudo locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

二、Node.js 输出编码问题

Node.js 默认使用 UTF-8,但如果:

  • 日志来自文件
  • 文件本身是 GBK / GB2312
  • 你用 console.log 打印了 Buffer

就会乱码。

示例(错误)

const fs = require('fs');
const data = fs.readFileSync('log.txt'); // GBK 文件
console.log(data.toString()); // 乱码

正确方式

console.log(data.toString('utf8'));

如果是 GBK:

const iconv = require('iconv-lite');
console.log(iconv.decode(data, 'gbk'));

三、Docker / 容器环境乱码(非常常见)

Docker 容器默认 没有 UTF-8 环境。

解决(Dockerfile)

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

或:

ENV LANG=en_US.UTF-8

四、Windows 终端连 Ubuntu(SSH)

如果你在:

  • Windows Terminal
  • PuTTY
  • Xshell

连接 Ubuntu,编码不对也会乱码。

解决

  • 终端编码设为 UTF-8
  • 不要用 GBK

五、日志本身没问题,只是“看”的方式不对

例如:

cat log.txt

乱码,但:

less log.txt

正常

可能是:

  • 文件编码非 UTF-8
  • 终端未识别

可用:

file log.txt

六、快速自检清单 ✅

  1. locale 是否是 UTF-8?
  2. 日志文件编码是什么?
  3. 是否在 Docker 中运行?
  4. 是否从 Windows 终端连接?
  5. 是否直接 toString() 了 Buffer?

如果你愿意,可以把:

  • 乱码截图
  • locale 输出
  • Node.js 日志相关代码

发出来,我可以帮你精准定位。

0 踩