温馨提示×

Nodejs日志乱码怎么解决

小樊
40
2026-07-07 10:24:09
栏目: 编程语言

在 Node.js 中遇到日志乱码,通常是字符编码不一致导致的,尤其是在 Windows 终端文件日志 中比较常见。下面按常见场景给你总结解决方案。


一、终端输出乱码(最常见)

1️⃣ Windows CMD / PowerShell 乱码

原因
Windows 终端默认编码是 GBK,而 Node.js 输出是 UTF-8

✅ 解决方案

方法一:修改终端编码为 UTF-8

chcp 65001

然后重新运行:

node app.js

注意:CMD 对 UTF-8 支持一般,推荐用 PowerShell / Windows Terminal


方法二:使用 Windows Terminal(推荐)

  • 下载 Windows Terminal
  • 默认就是 UTF-8
  • 基本不会乱码

方法三:PowerShell 设置 UTF-8

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

二、Node.js 代码层面解决

2️⃣ 强制 stdout 使用 UTF-8

process.stdout.setDefaultEncoding('utf8');
console.log('中文日志');

3️⃣ 文件日志乱码(写 log 文件)

错误示例

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

正确写法

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

写文件一定要指定编码


三、读取文件或接口日志乱码

4️⃣ 读取文件时指定编码

fs.readFileSync('data.txt', 'utf8');

或:

fs.createReadStream('data.txt', { encoding: 'utf8' });

四、Web 接口返回日志乱码

5️⃣ HTTP 响应头设置 UTF-8

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

如果是 JSON:

res.setHeader('Content-Type', 'application/json; charset=utf-8');

五、第三方日志库乱码

6️⃣ winston / pino 乱码

日志文件一定要 UTF-8

const winston = require('winston');

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({
      filename: 'app.log',
      options: { encoding: 'utf8' }
    })
  ]
});

六、快速自查清单 ✅

场景 是否 UTF-8
Node.js 源码 ✅ UTF-8
终端编码 ✅ UTF-8
写文件 ✅ 指定 utf8
HTTP 响应 ✅ charset=utf-8
日志库 ✅ 配置文件编码

七、最推荐的组合 ✅

Node.js + Windows Terminal + UTF-8

基本可以彻底解决乱码问题。


如果你愿意,可以告诉我:

  • 你是 Windows / macOS / Linux
  • 乱码是 终端 / 文件 / 接口 / Docker
  • 用的 什么日志库

我可以给你一个完全针对性的解决方案

0