在 CentOS 上 Golang 日志出现乱码,绝大多数情况是字符编码不一致导致的。下面按「最常见原因 → 解决办法」给你一套排查方案。
locale
如果看到类似:
LANG=
LC_ALL=
或
zh_CN.GBK
就很可能乱码。
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
永久生效(推荐):
vim /etc/locale.conf
内容改为:
LANG=en_US.UTF-8
然后:
source /etc/locale.conf
Go 默认使用 UTF-8 输出,如果:
就会乱码。
✅ 终端用 UTF-8(推荐)
✅ 日志文件用 UTF-8 打开
cat、less、vimfile log.txt
如果是:
log.txt: ISO-8859 text
iconv -f GBK -t UTF-8 log.txt > log_utf8.txt
如果你必须输出 GBK(比如老系统):
import "github.com/axgle/mahonia"
enc := mahonia.NewEncoder("gbk")
fmt.Println(enc.ConvertString("中文日志"))
⚠️ 一般不推荐,尽量统一 UTF-8。
| 问题 | 解决 |
|---|---|
| xshell 中文乱码 | 终端编码改 UTF-8 |
| 日志文件乱码 | cat / vim 看,别用记事本 |
| Docker 里乱码 | Docker 里也要设 LANG |
| systemd 启动乱码 | service 里加 Environment=LANG=en_US.UTF-8 |
locale
echo "中文测试"
go run main.go
cat log.txt
如果你愿意,可以:
我可以直接帮你定位到具体哪一步。