在 Debian 上 Node.js 日志出现“乱”的情况,通常不是 Node.js 本身的问题,而是字符编码、终端环境、系统 locale、日志工具或输出方式导致的。下面按常见原因给你系统排查一下。
????? 或乱码console.log('中文') 显示异常Debian 默认可能 没有启用 UTF‑8 locale
locale
如果看到:
LANG=
LC_ALL=
或不是 UTF-8 结尾,就有问题。
sudo apt update
sudo apt install locales
sudo dpkg-reconfigure locales
勾选:
en_US.UTF-8
zh_CN.UTF-8
sudo update-locale LANG=en_US.UTF-8
reboot
ssh 登录后日志乱journalctl 或文件看正常终端没有使用 UTF‑8
systemctl status xxx 日志乱\u4e2d\u6587 这种 Unicode 转义systemd 对输出做了转义
查看完整日志:
journalctl -u your-service -f
或关闭转义:
journalctl --no-pager --output=cat
fs.writeFileSync('log.txt', '中文')
但文件被当成 latin1 打开
fs.writeFileSync('log.txt', '中文', 'utf8')
Docker 默认 locale 是 POSIX
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
PM2 本身没问题,但环境 locale 不对
pm2 restart app --update-env
或设置:
export LANG=en_US.UTF-8
你可以逐条确认:
node -e "console.log('中文测试')"
locale
file -i your-log.log
你可以直接把下面信息发我:
cat /etc/os-release)console.log / 文件 / systemd / PM2 / Docker我可以精确告诉你改哪一行,而不是泛泛而谈。