在 Debian 上 JS 日志出现乱码,通常是字符编码不一致导致的(一般是 UTF-8 和 GBK/Latin1 混用)。下面按常见场景逐步排查和修复。
locale
正常应为:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果不是 UTF-8,先修系统编码。
sudo apt update
sudo apt install -y locales
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
重新登录或重启:
reboot
Node.js 默认是 UTF-8,但如果:
可能用了其他编码。
✅ 显式指定 UTF-8
fs.readFile('log.txt', 'utf8', (err, data) => {
console.log(data);
});
export LANG=en_US.UTF-8
node app.js
或:
LANG=en_US.UTF-8 node app.js
PM2 默认不读 shell 的 locale。
✅ 解决方式:
pm2 delete all
LANG=en_US.UTF-8 pm2 start app.js
或者:
pm2 start app.js --env production
并在 ecosystem.config.js 中:
env: {
LANG: "en_US.UTF-8"
}
在 Dockerfile 加:
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
用 iconv 转码:
iconv -f gbk -t utf8 log.txt > log_utf8.txt
Node 中:
const iconv = require('iconv-lite');
const buf = fs.readFileSync('log.txt');
console.log(iconv.decode(buf, 'gbk'));
export LANG=en_US.UTF-8
locale 是 UTF-8LANG=en_US.UTF-8如果你愿意,可以告诉我:
我可以直接给你对应修复命令。