温馨提示×

Nodejs日志为何打印乱码

小樊
66
2026-07-18 20:01:02
栏目: 编程语言

Node.js 日志打印乱码通常不是 Node.js 本身的问题,而是字符编码不一致导致的。下面按常见场景给你一个排查清单和解决方案。


一、最常见原因:终端 / 文件编码不一致

1️⃣ 终端编码不是 UTF‑8(最常见)

Windows(cmd / PowerShell)

Windows 默认可能不是 UTF‑8。

解决方法:

chcp 65001

然后重新运行:

node app.js

✅ 推荐:使用 Windows Terminal / PowerShell 7 / VS Code 终端


2️⃣ 日志文件不是 UTF‑8

如果你把日志写入文件:

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

但用 Notepad / 某些编辑器 打开,可能显示乱码。

✅ 解决:

  • VS Code
  • 右下角编码选择 UTF‑8
  • 或保存为 UTF‑8

二、Node.js 源码文件编码问题

源码文件不是 UTF‑8

如果你的 .js 文件是:

  • GBK
  • ANSI

Node.js 会按 UTF‑8 解析,导致乱码。

✅ 解决:

  • 用 VS Code
  • 右下角编码 → UTF‑8
  • 重新保存文件

三、console.log 本身没问题,但输出环境有问题

示例

console.log('中文日志');

✅ Node.js 默认使用 UTF‑8 ❌ 乱码通常是终端或管道的问题


四、子进程 / spawn 输出乱码(很常见)

如果你用:

child_process.spawn('xxx')

原因

  • Windows 程序输出 GBK
  • Node 默认按 UTF‑8 解析

解决方案(iconv-lite)

npm install iconv-lite
const { spawn } = require('child_process');
const iconv = require('iconv-lite');

const child = spawn('cmd', ['/c', 'chcp 65001 && echo 中文']);

child.stdout.on('data', (data) => {
  console.log(iconv.decode(data, 'cp936')); // GBK 转 UTF-8
});

五、HTTP / 接口返回乱码

忘记设置响应头

res.setHeader('Content-Type', 'text/plain; charset=utf-8');
res.end('中文');

或:

res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });

六、快速自检清单 ✅

检查项 是否
Node.js 文件是 UTF‑8
终端支持 UTF‑8
日志文件是 UTF‑8
子进程输出编码正确
HTTP 响应头有 charset

七、一句话总结

Node.js 日志乱码 99% 是“输出环境编码 ≠ UTF‑8”导致的,而不是 Node.js 本身。


如果你愿意,可以把:

  • 操作系统
  • 终端类型
  • 出现乱码的代码
  • 是否涉及文件 / 子进程 / HTTP

贴出来,我可以精准定位是哪一步导致的乱码

0