温馨提示×

debian golang日志乱码怎么办

小樊
43
2026-09-25 10:57:51
栏目: 编程语言

在 Debian 上使用 Golang 时日志出现乱码,通常是字符编码问题或终端/输出环境不匹配导致的。下面按常见原因逐一说明解决办法。


一、确认是不是真的“乱码”

先判断乱码类型:

  • 中文 这种 → UTF-8 被当成 Latin1 显示
  • ???? → 编码不支持 / 输出被截断
  • 方块/问号 → 终端字体不支持中文

二、最常见原因:终端不是 UTF-8

1. 查看当前 locale

locale

正常应类似:

LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8

如果是:

LANG=C
LC_ALL=C

或 POSIX,就会乱码。

2. 设置 UTF-8 locale

sudo apt update
sudo apt install locales
sudo dpkg-reconfigure locales

勾选:

zh_CN.UTF-8
en_US.UTF-8

然后:

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

建议写入:

~/.bashrc
~/.profile

三、Go 程序本身没问题,但输出环境不对

示例错误代码

fmt.Println("中文日志")

如果终端不是 UTF-8,就会乱码。

✅ 解决:

  • 确保终端是 UTF-8(如上)
  • 不要手动转换编码

四、日志文件乱码(不是终端)

1. 写文件时指定 UTF-8

Go 默认就是 UTF-8,无需转换。

os.WriteFile("log.txt", []byte("中文日志"), 0644)

2. 查看文件用 UTF-8

cat log.txt

如果乱码:

file log.txt

确认是:

UTF-8 Unicode text

用 less:

LESSCHARSET=utf-8 less log.txt

五、使用日志库时的注意事项

log / slog

log.Println("中文日志")

✅ 默认 UTF-8,没问题

zap

logger.Info("中文日志")

✅ 也没问题

❌ 不要这样写:

string([]byte{0xff, 0xfe}) // 错误编码

六、Docker / systemd 场景(常见坑)

Docker

在 Dockerfile 中加:

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

systemd 服务

编辑:

sudo systemctl edit yourapp.service

加入:

[Service]
Environment=LANG=zh_CN.UTF-8
Environment=LC_ALL=zh_CN.UTF-8

七、快速自检清单 ✅

  • [ ] locale 是 UTF-8
  • [ ] 终端支持中文
  • [ ] Go 源码是 UTF-8
  • [ ] 日志文件是 UTF-8
  • [ ] Docker / systemd 设置了 UTF-8

如果你愿意,可以把:

  • 乱码截图或示例
  • Go 代码片段
  • 运行环境(裸机 / Docker / systemd)

发出来,我可以精准定位是哪一层出问题。

0 踩