温馨提示×

Ubuntu Nodejs日志为何乱码

小樊
43
2026-08-05 09:48:46
栏目: 编程语言

Ubuntu 下 Node.js 日志出现乱码,通常不是 Node.js 本身的问题,而是字符编码不一致导致的。下面按常见原因给你排查思路和解决办法。


一、最常见原因:终端 / 系统编码不是 UTF‑8

1️⃣ 查看当前系统编码

locale

如果看到类似:

LANG=C
LC_ALL=

或不是 UTF-8,就很可能乱码。

✅ 正确示例

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

2️⃣ 临时修复(当前终端)

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

3️⃣ 永久修复(推荐)

编辑:

sudo nano /etc/default/locale

写入:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

然后重启或重新登录。


二、Node.js 控制台输出乱码

✅ Node.js 默认使用 UTF‑8

终端不支持 UTF‑8就会乱码。

检查 Node.js 编码

node -e "console.log(process.stdout.encoding)"

如果不是 utf8,说明终端有问题。


三、日志文件本身是乱码

1️⃣ 查看日志文件编码

file -i app.log

如果看到:

app.log: text/plain; charset=iso-8859-1

说明不是 UTF‑8。

✅ 解决方式

用 UTF‑8 重新打开 / 写入

fs.writeFileSync('app.log', '中文日志', 'utf8');

转换已有文件

iconv -f gbk -t utf8 app.log > app_utf8.log

四、Windows 上传到 Ubuntu 导致乱码(GBK → UTF‑8)

如果你在 Windows 写代码 / 日志,再传到 Ubuntu

  • Windows 默认 GBK
  • Ubuntu 默认 UTF‑8

✅ 解决

统一使用 UTF‑8

console.log('中文');

或转换文件

iconv -f gbk -t utf8 main.js -o main_utf8.js

五、PM2 / Docker 日志乱码

PM2

PM2 本身不乱码,但终端编码不对会乱。

✅ 解决:

pm2 logs --raw

或确保服务器 locale 是 UTF‑8。


Docker

Docker 容器默认可能没 UTF‑8。

解决方式

ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8

六、快速自检清单 ✅

检查项 命令
系统编码 locale
Node stdout 编码 process.stdout.encoding
日志文件编码 file -i app.log
是否 Windows → Linux iconv

七、最常见一句话总结

Ubuntu + Node.js 日志乱码 = 系统或终端不是 UTF‑8


如果你愿意,可以把下面信息发我,我可以精准定位:

  1. 日志是 终端输出 还是 文件
  2. 日志内容示例(乱码截图或文字)
  3. 是否在 Docker / PM2 / Windows WSL

我可以直接给你“改哪一行就解决”的方案。

0