在 Golang 里出现“日志乱码”,通常不是 Go 本身的问题,而是编码、终端、输出方式不匹配导致的。下面按常见场景 + 解决方案给你总结。
?? 或乱码Windows(CMD / PowerShell)
chcp 65001
然后重新运行程序。
永久方案(Windows 10+)
设置 → 时间和语言 → 管理语言设置 → Beta: 使用 Unicode UTF-8
import "golang.org/x/text/encoding/simplifiedchinese"
func main() {
encoder := simplifiedchinese.GBK.NewEncoder()
data, _ := encoder.Bytes([]byte("中文日志"))
fmt.Println(string(data))
}
⚠️ 只适合老系统,不建议新项目使用。
✅ 用 UTF-8 打开日志文件
✅ 确保日志写入 UTF-8
f, _ := os.OpenFile("app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
f.WriteString("中文日志\n")
Go 默认写入就是 UTF-8,不需要额外处理。
Content-Typew.Header().Set("Content-Type", "application/json; charset=utf-8")
logger, _ := zap.NewProduction()
logger.Info("中文日志")
✅ zap 默认 UTF-8
❌ 乱码通常是终端问题,不是 zap
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
或:
locale -a
确保有 zh_CN.UTF-8
你可以按顺序检查:
Go 不乱码,乱的是终端和编码。
如果你愿意,可以把:
发给我,我可以帮你精准定位是哪一种情况。