在 Debian 上运行 Golang 程序出现日志乱码,通常不是 Go 本身的问题,而是字符编码 / 终端 / 环境不一致导致的。下面按最常见原因逐一说明。
??? 或 䏿–‡locale
正常应是:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果是:
C
POSIX
那就是 非 UTF-8 环境,Go 输出 UTF-8 但终端按非 UTF-8 解析 → 乱码。
sudo apt install locales
sudo dpkg-reconfigure locales
勾选:
en_US.UTF-8
然后:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
如果日志源不是 UTF-8(如 GBK),直接打印就会乱码。
import "golang.org/x/text/encoding/simplifiedchinese"
decoder := simplifiedchinese.GBK.NewDecoder()
utf8Str, _ := decoder.String(gbkStr)
log.Println(utf8Str)
./app > log.txt
cat log.txt # 终端是 UTF-8,但文件是 GBK
iconv -f GBK -t UTF-8 log.txt > new.txt
Docker 默认 C locale:
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
[Service]
Environment=LANG=en_US.UTF-8
locale
echo "中文测试"
file log.txt
如果:
locale 不是 UTF-8 → 环境乱码file log.txt 显示 ISO-8859 / GBK → 数据源乱码Debian 上 Golang 日志乱码,90% 是因为系统 locale 不是 UTF-8。
如果你愿意,可以把:
locale 输出发我,我可以直接帮你定位。