温馨提示×

debian js日志乱码怎么破

小樊
31
2026-09-13 04:59:16
栏目: 编程语言

在 Debian 上 JS 日志乱码,通常不是 JS 本身的问题,而是字符编码 / 终端 / 文件编码不一致导致的。下面按最常见场景给你一套“排查 + 解决”思路。


一、先确认乱码长什么样

  • 中文 这种 → UTF-8 被当成 Latin1 解码
  • ????编码完全不支持
  • 终端里乱,文件里正常 → 终端编码问题
  • 文件里就乱 → 写日志时编码不对

二、最快排查(终端乱码)

1️⃣ 看终端编码

locale

正常应该是:

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

如果不是 UTF-8:

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

三、Node.js 日志乱码(最常见)

2️⃣ Node 默认输出编码

Node 默认按 UTF-8 输出,但如果:

  • 终端不是 UTF-8
  • 或你用了 iconv / child_process 错误转码

就会乱

✅ 确保启动环境是 UTF-8:

node app.js

前先:

export LANG=en.UTF-8

3️⃣ 写日志文件时指定编码

错误写法(容易乱码)

fs.writeFileSync('log.txt', str)

✅ 正确写法:

fs.writeFileSync('log.txt', str, 'utf8')

或:

const ws = fs.createWriteStream('log.txt', { encoding: 'utf8' })

4️⃣ console.log 本身是 UTF-8

如果你看到:

console.log('中文')

乱码 → 99% 是终端问题,不是 JS 问题


四、PM2 / 服务运行乱码

5️⃣ PM2 乱码

PM2 会继承系统 locale

解决:

pm2 stop all
export LANG=en_US.UTF-8
pm2 start app.js

或:

pm2 start app.js --env production

并在 ecosystem.config.js 里:

env: {
  LANG: 'en_US.UTF-8'
}

五、Docker 里的 JS 日志乱码(高频)

6️⃣ Docker 没设 locale

Docker 默认是 POSIX

✅ Dockerfile 加:

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

或:

ENV LANG=en_US.UTF-8

六、日志被错误转码(最阴间)

如果你:

  • iconv
  • Buffer.toString('binary')
  • latin1

就容易炸

✅ 统一只用:

Buffer.from(str, 'utf8').toString('utf8')

七、一行自检命令

file log.txt

如果是:

log.txt: UTF-8 Unicode text

说明文件没问题,是终端问题


八、我可以更精准帮你

你可以直接贴:

  1. 乱码截图 / 示例
  2. 运行方式(node / pm2 / docker)
  3. 写日志的代码

我可以直接给你改好的代码版本

0