在 Debian 上 Node.js 日志出现乱码,通常是字符编码不一致导致的。下面按常见原因给你一套排查和解决思路。
常见乱码表现:
???\uXXXX䏿–‡ 这种(典型 UTF-8 被当成 Latin1)locale
正常应看到:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果不是 UTF-8,生成并设置:
sudo apt install locales
sudo dpkg-reconfigure locales
# 选择 en_US.UTF-8 或 zh_CN.UTF-8
设置环境变量:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
node app.js
或:
NODE_ENV=production LANG=en_US.UTF-8 node app.js
\u4e2d\u6587说明:
JSON.stringify 了✅ 正常
❌ 如果你直接 console.log(JSON.stringify(obj)) 看日志,会乱
解决:
console.log(JSON.stringify(obj, null, 2));
或:
console.log(obj);
file -i app.log
如果不是 UTF-8:
app.log: text/plain; charset=iso-8859-1
fs.writeFileSync('app.log', data, 'utf8');
或 stream:
fs.createWriteStream('app.log', { encoding: 'utf8' });
PM2 默认环境可能没 UTF-8:
pm2 start app.js --env production
解决:
pm2 delete app
LANG=en_US.UTF-8 pm2 start app.js
或:
pm2 env myapp LANG en_US.UTF-8
Docker 默认可能没 locale:
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
locale 是 UTF-8utf8LANGfile -i 是 utf-8如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一层出的问题。