Linux 下 JS 日志乱码一般由「字符编码不一致」或「终端/文件编码不匹配」导致。可以按下面思路一步步排查和解决。
不同场景处理方式不同。
locale
如果看到不是 UTF-8,执行:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
永久生效(CentOS / Ubuntu):
# CentOS
localedef -i en_US -f UTF-8 en_US.UTF-8
# Ubuntu
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
运行 Node 时:
node app.js
确保环境编码:
node -e "console.log(process.env.LANG)"
在代码里也可以强制:
process.env.LANG = 'en_US.UTF-8';
❌ 错误示例(容易乱码):
fs.writeFileSync('log.txt', data);
✅ 正确方式:
fs.writeFileSync('log.txt', data, 'utf8');
或用 winston / pino:
logger.info('中文日志');
cat log.txt
less log.txt
如果还乱码:
iconv -f GBK -t UTF-8 log.txt
或:
vim log.txt
:set fileencoding=utf-8
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
或:
ENV LANG=en_US.UTF-8
res.setHeader('Content-Type', 'application/json; charset=utf-8');
fetch('/api/log')
.then(res => res.text())
locale 是 UTF-8utf8LANG如果你愿意,可以告诉我:
我可以直接给你针对性命令或代码。