温馨提示×

为什么debian golang日志乱码

小樊
42
2026-09-16 08:26:54
栏目: 编程语言

在 Debian 上使用 Go 打印日志出现乱码,通常不是 Go 本身的问题,而是字符编码 / 区域设置(locale)终端编码不一致导致的。下面按常见原因逐个说明。


一、最常见原因:系统 Locale 不是 UTF-8

Debian 默认可能使用:

LANG=C
LC_ALL=C

此时:

  • 终端按 ASCII 解释字节
  • 中文等非 ASCII 字符就会显示为乱码

检查当前 locale

locale

如果看到:

LANG=C
LC_CTYPE=C

就很可能是原因。

解决方法

  1. 生成 UTF-8 locale
sudo dpkg-reconfigure locales
# 至少选 en_US.UTF-8 或 zh_CN.UTF-8
  1. 设置环境变量(推荐写到 ~/.bashrc/etc/environment
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
  1. 重新登录或:
source ~/.bashrc

二、终端 / SSH 客户端编码不对

即使系统是 UTF-8,如果你的:

  • PuTTY
  • Xshell
  • VS Code 终端
  • Docker 日志查看器

不是 UTF-8,也会乱码。

检查

echo $LANG

解决

  • 终端编码设置为 UTF-8
  • Windows 用户注意:不要使用 GBK 终端看 UTF-8 日志

三、Go 程序本身输出的是 UTF-8(这是正确的)

Go 的 fmt.Println / log 默认输出 UTF-8 字节流

log.Println("中文日志")

✅ 这是对的
❌ 不需要转 GBK

如果你在 Windows 控制台看,才会乱码。


四、日志写入文件后乱码

如果:

  • 程序输出到文件
  • cat 或编辑器打开乱码

检查文件编码:

file log.txt

如果是 UTF-8,问题在查看工具


五、Docker / systemd 场景特别说明

Docker

容器里默认可能:

LANG=C

解决:

ENV LANG=C.UTF-8

systemd 服务

systemd 默认环境可能不含 UTF-8:

[Service]
Environment=LANG=en_US.UTF-8

六、快速自检清单 ✅

  • [ ] locale 是 UTF-8
  • [ ] 终端编码是 UTF-8
  • [ ] Go 程序未手动转 GBK
  • [ ] 日志文件编码是 UTF-8
  • [ ] Docker / systemd 设置了 UTF-8

七、如果你愿意,可以贴出:

  • locale 输出
  • 乱码截图或示例
  • Go 日志代码片段

我可以更精确地帮你定位。

0