温馨提示×

为何linux js日志乱码

小樊
33
2026-10-11 10:11:00
栏目: 编程语言

Linux 下 JS(JavaScript / Node.js)日志出现乱码,通常不是 JS 本身的问题,而是字符编码、终端、文件、环境不一致导致的。下面按常见原因逐条说明。


一、最常见原因:编码不一致(UTF-8 没统一)

1. 程序输出的是 UTF-8,但终端不是

例如:

  • Node.js 输出 UTF-8
  • 终端(SecureCRT / PuTTY / 某些老终端)用 GBK

结果:中文乱码

✅ 解决:

# 查看当前编码
locale

# 设置 UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

终端也要设置为 UTF-8


2. 日志文件是 GBK,但用 UTF-8 看

常见于:

  • Windows 写的服务
  • 老系统日志

✅ 解决:

file log.txt
iconv -f gbk -t utf-8 log.txt > log.utf8.txt

二、Node.js 本身编码问题

1. 控制台输出乱码(本地 OK,Linux 乱)

Node.js 默认用系统 locale

检查:

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

✅ 解决:

export LANG=zh_CN.UTF-8

2. 写文件时指定了错误编码

错误示例:

fs.writeFileSync('log.txt', data) // 默认 utf8,但 data 可能是 buffer

✅ 正确:

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

三、前端 JS 日志(浏览器 / 服务器混合)

1. 接口返回乱码

  • 后端没设置 Content-Type: charset=utf-8
  • Nginx 没设编码

✅ Nginx:

charset utf-8;

✅ Node(Express):

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

四、日志框架配置问题

常见日志库

  • winston
  • pino
  • log4js

可能问题:

  • 文件流编码不是 utf8
  • 颜色控制符导致“看起来乱码”

✅ winston 示例:

new winston.transports.File({
  filename: 'app.log',
  encoding: 'utf8'
})

五、SSH / 容器环境问题

Docker 中常见

docker logs xxx

乱码

原因:

  • 容器 locale 没装
  • 宿主终端编码不同

✅ Dockerfile:

ENV LANG=C.UTF-8

六、快速自查清单 ✅

  1. locale 是否是 UTF-8
  2. 终端编码是否是 UTF-8
  3. 日志文件 file xxx.log 看编码
  4. Node 写文件是否指定 utf8
  5. 是否是颜色字符造成的“伪乱码”

七、典型一句话总结

Linux JS 日志乱码,99% 是 UTF-8 没统一:程序、终端、文件、系统 locale 必须全 UTF-8。

如果你愿意,可以把:

  • 日志样例
  • Node / 前端代码
  • Linux 发行版

发出来,我可以直接帮你定位是哪一种乱码。

0 踩