Debian 上 JS(JavaScript)日志出现乱码,通常不是 Debian 本身的问题,而是字符编码、终端环境或程序输出方式不一致导致的。下面按常见原因给你一个排查清单。
Debian 默认应使用 UTF-8,但服务器或容器里常被改掉。
检查:
locale
正常应看到类似:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果不是,修复:
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.js 默认使用 UTF‑8,但如果:
就可能乱码。
检查:
console.log(process.env.LANG)
建议:
process.stdout.setDefaultEncoding('utf8')
查看编码:
file -i app.log
如果看到:
charset=iso-8859-1
转换:
iconv -f ISO-8859-1 -t UTF-8 app.log > app_utf8.log
例如:
✅ 解决方法:
PuTTY 设置:
Window → Translation → Remote character set → UTF-8
容器内经常没有 UTF‑8:
docker exec -it 容器 bash
locale
解决(Dockerfile):
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
RUN apt-get update && apt-get install -y locales \
&& sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
&& locale-gen
systemd 默认 UTF‑8 没问题,但:
查看:
journalctl -u your-service
可尝试:
journalctl -u your-service --no-pager
| 现象 | 原因 |
|---|---|
显示 � |
非 UTF‑8 |
显示 æ–‡å— |
UTF‑8 被当成 Latin‑1 |
问号 ??? |
编码丢失 |
| 只有英文正常 | 中文字符集缺失 |
# 1. 看系统编码
locale
# 2. 看日志编码
file -i 日志文件
# 3. 看 Node 环境
node -e "console.log(process.env.LANG)"
# 4. 看终端编码
echo $TERM
你可以直接贴出:
locale 输出我可以一步到位告诉你具体是哪一层导致的乱码 ✅