在 CentOS 上运行 Golang 程序出现日志乱码,通常是字符编码不一致导致的(如终端是 GBK,程序输出 UTF-8,或反过来)。下面按常见原因一步步排查和解决。
locale
正常应看到:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果是:
LANG=zh_CN.GBK
就容易乱码。
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
source ~/.bashrc
locale -a | grep UTF-8
如果没有,安装:
yum install -y glibc-locale-source
localedef -i en_US -f UTF-8 en_US.UTF-8
✅ Go 默认使用 UTF-8 编码
所以:
file main.go
如果不是 UTF-8:
iconv -f GBK -t UTF-8 main.go -o main_utf8.go
cat log.txt
less log.txt
如果还是乱码:
file log.txt
iconv -f GBK -t UTF-8 log.txt > log_utf8.txt
如果你在 Windows 写代码 → 上传 CentOS:
import "golang.org/x/text/encoding/simplifiedchinese"
encoder := simplifiedchinese.GBK.NewEncoder()
data, _ := encoder.String("中文日志")
fmt.Println(data)
locale 是 UTF-8如果你愿意,可以把:
locale 输出发出来,我可以精准定位是哪一步出的问题。