在 CentOS 上用 Golang 打日志出现乱码,通常不是 Go 本身的问题,而是字符编码 / 终端 / 环境不一致导致的。下面按常见原因给你系统排查一下。
locale
正常应该是:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果看到:
LANG=zh_CN.GBK
# 或
LC_ALL=C
就很可能乱码。
✅ 解决:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
永久生效:
echo 'export LANG=en_US.UTF-8' >> ~/.bashrc
echo 'export LC_ALL=en_US.UTF-8' >> ~/.bashrc
很多人在 Windows + Xshell 上连 CentOS:
✅ 解决:
Go 默认是 UTF-8 源码
log.Println("服务启动成功")
✅ 正确
❌ 但如果你用 GBK 工具编辑过 .go 文件 → 乱码
检查:
file main.go
如果不是:
main.go: UTF-8 Unicode text
重新用 UTF-8 保存。
./app > app.log
然后 Windows 用记事本打开 → 乱码
✅ 原因:
✅ 解决:
iconv -f UTF-8 -t GBK app.log > app_gbk.log
如果你用了:
例如:
exec.Command("some_tool")
而 some_tool 输出 GBK
✅ 解决(转码):
import "golang.org/x/text/encoding/simplifiedchinese"
// GBK -> UTF-8
| 场景 | 原因 |
|---|---|
| 控制台乱码 | 终端编码不是 UTF-8 |
| 文件乱码 | 打开工具编码不对 |
| 中文日志乱码 | LANG 不是 UTF-8 |
| 命令输出乱码 | 外部程序非 UTF-8 |
locale
file main.go
echo $LANG
并确认:
如果你愿意,可以把:
locale 输出发出来,我可以直接帮你定位是哪一层出的问题。