温馨提示×

linux js日志乱码怎么办

小樊
46
2026-10-05 12:28:14
栏目: 编程语言

Linux 下 JS 日志乱码一般由「字符编码不一致」或「终端/文件编码不匹配」导致。可以按下面思路一步步排查和解决。


一、先确认乱码出现在哪里

  1. 终端直接运行 Node 脚本乱码
  2. 日志写入文件后查看乱码
  3. Docker / 远程服务器日志乱码
  4. 前端页面或接口返回的日志乱码

不同场景处理方式不同。


二、最常见的解决方式(90% 情况)

1️⃣ 设置 Linux 系统编码为 UTF-8

locale

如果看到不是 UTF-8,执行:

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

永久生效(CentOS / Ubuntu):

# CentOS
localedef -i en_US -f UTF-8 en_US.UTF-8

# Ubuntu
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

2️⃣ Node.js 强制使用 UTF-8

运行 Node 时:

node app.js

确保环境编码:

node -e "console.log(process.env.LANG)"

在代码里也可以强制:

process.env.LANG = 'en_US.UTF-8';

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

❌ 错误示例(容易乱码):

fs.writeFileSync('log.txt', data);

✅ 正确方式:

fs.writeFileSync('log.txt', data, 'utf8');

或用 winston / pino:

logger.info('中文日志');

4️⃣ 终端查看日志时用 UTF-8

cat log.txt
less log.txt

如果还乱码:

iconv -f GBK -t UTF-8 log.txt

或:

vim log.txt
:set fileencoding=utf-8

三、Docker 场景(非常常见)

Dockerfile 加环境变量

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

或:

ENV LANG=en_US.UTF-8

四、前端 / 接口日志乱码

后端返回时指定

res.setHeader('Content-Type', 'application/json; charset=utf-8');

前端请求

fetch('/api/log')
  .then(res => res.text())

五、快速自检清单 ✅

  • [ ] locale 是 UTF-8
  • [ ] Node 日志写入指定 utf8
  • [ ] 终端支持 UTF-8
  • [ ] Docker 设置了 LANG
  • [ ] 文件不是 GBK

如果你愿意,可以告诉我:

  • 用的是 Node 几
  • 日志是 终端 / 文件 / Docker
  • 乱码是 中文 / emoji / 特殊符号

我可以直接给你针对性命令或代码。

0 踩