在 Debian 上使用 Golang 时日志出现乱码,通常是字符编码问题或终端/输出环境不匹配导致的。下面按常见原因逐一说明解决办法。
先判断乱码类型:
䏿–‡ 这种 → UTF-8 被当成 Latin1 显示???? → 编码不支持 / 输出被截断locale
正常应类似:
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
如果是:
LANG=C
LC_ALL=C
或 POSIX,就会乱码。
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
fmt.Println("中文日志")
如果终端不是 UTF-8,就会乱码。
✅ 解决:
Go 默认就是 UTF-8,无需转换。
os.WriteFile("log.txt", []byte("中文日志"), 0644)
cat log.txt
如果乱码:
file log.txt
确认是:
UTF-8 Unicode text
用 less:
LESSCHARSET=utf-8 less log.txt
log.Println("中文日志")
✅ 默认 UTF-8,没问题
logger.Info("中文日志")
✅ 也没问题
❌ 不要这样写:
string([]byte{0xff, 0xfe}) // 错误编码
在 Dockerfile 中加:
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
编辑:
sudo systemctl edit yourapp.service
加入:
[Service]
Environment=LANG=zh_CN.UTF-8
Environment=LC_ALL=zh_CN.UTF-8
locale 是 UTF-8如果你愿意,可以把:
发出来,我可以精准定位是哪一层出问题。