Node.js 日志出现乱码,通常不是 Node 本身“坏了”,而是字符编码在某一环节对不上。下面按最常见原因给你梳理一下。
Node.js 默认输出 UTF-8,但:
✅ 表现:
�������
✅ 解决:
chcp 65001
如果你把日志写到文件:
fs.writeFileSync('log.txt', '中文')
但用 GBK 编辑器 打开,就会乱码。
✅ 解决:
fs.writeFileSync('log.txt', '中文', 'utf8')
例如:
fs.readFile('a.txt', (err, data) => {
console.log(data.toString()) // ❌ 默认不一定是 utf8
})
✅ 正确:
fs.readFile('a.txt', 'utf8', (err, data) => {
console.log(data)
})
console.log(res.body) // Buffer
✅ 解决:
console.log(res.body.toString('utf8'))
如 winston、pino:
✅ 示例(winston):
new winston.transports.File({
filename: 'app.log',
encoding: 'utf8'
})
locale
如果看到:
C
POSIX
就可能乱码。
✅ 解决:
ENV LANG=C.UTF-8
.toString('utf8')console.log('中文测试')
如果这也乱码 → 终端问题
如果这正常、写文件乱码 → 文件编码问题
如果你愿意,可以贴:
我可以帮你精准定位是哪一种。