Linux 下 JS(JavaScript / Node.js)日志出现乱码,通常不是 JS 本身的问题,而是字符编码、终端、文件、环境不一致导致的。下面按常见原因逐条说明。
例如:
结果:中文乱码
✅ 解决:
# 查看当前编码
locale
# 设置 UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
终端也要设置为 UTF-8
常见于:
✅ 解决:
file log.txt
iconv -f gbk -t utf-8 log.txt > log.utf8.txt
Node.js 默认用系统 locale
检查:
node -e "console.log(process.env.LANG)"
✅ 解决:
export LANG=zh_CN.UTF-8
错误示例:
fs.writeFileSync('log.txt', data) // 默认 utf8,但 data 可能是 buffer
✅ 正确:
fs.writeFileSync('log.txt', data, 'utf8')
Content-Type: charset=utf-8✅ Nginx:
charset utf-8;
✅ Node(Express):
res.setHeader('Content-Type', 'application/json; charset=utf-8');
可能问题:
✅ winston 示例:
new winston.transports.File({
filename: 'app.log',
encoding: 'utf8'
})
docker logs xxx
乱码
原因:
✅ Dockerfile:
ENV LANG=C.UTF-8
locale 是否是 UTF-8file xxx.log 看编码utf8Linux JS 日志乱码,99% 是 UTF-8 没统一:程序、终端、文件、系统 locale 必须全 UTF-8。
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一种乱码。