在 Debian 上 JS 日志出现乱码,通常不是 JS 本身的问题,而是字符编码不一致导致的。下面按常见场景给你排查和解决思路。
????? → 一般是 UTF-8 被当成非 UTF-8䏿–‡)→ UTF-8 被当成 Latin1 解码Debian 默认应该是 UTF-8,但有时被改了。
检查:
locale
如果不是 UTF-8,例如:
LANG=C
LC_ALL=
修复:
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
✅ 重新登录 SSH 再看日志
Node 默认是 UTF-8,但如果你:
iconvNode 中明确指定编码:
console.log(Buffer.from('中文').toString('utf8'));
写文件时:
fs.writeFileSync('log.txt', str, 'utf8');
查看文件编码:
file log.txt
如果不是 UTF-8:
iconv -f GBK -t UTF-8 log.txt > log.utf8.txt
tail / cat 看日志乱码这是终端问题,不是日志问题。
cat log.txt
如果乱,但:
less log.txt
正常 → 说明终端编码不对
临时解决:
export LANG=zh_CN.UTF-8
在 Dockerfile 加:
ENV LANG=C.UTF-8
pm2 restart app --env LANG=en_US.UTF-8
log_format main '$remote_addr - $request - $http_user_agent';
确保系统 locale 是 UTF-8
locale 是 UTF-8LANG你可以贴:
locale 输出我可以直接帮你定位到具体哪一步出错。