温馨提示×

golang日志centos为何乱码

小樊
46
2026-09-15 06:13:01
栏目: 编程语言

在 CentOS 上用 Golang 打日志出现乱码,通常不是 Go 本身的问题,而是字符编码 / 终端 / 环境不一致导致的。下面按常见原因给你系统排查一下。


一、最常见原因:终端或系统不是 UTF-8

1️⃣ 查看系统编码

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

二、终端工具编码问题(Xshell / SecureCRT / Terminal)

很多人在 Windows + Xshell 上连 CentOS:

  • Xshell 默认编码不是 UTF-8
  • 日志里一有中文就乱码

✅ 解决:

  • Xshell → 属性 → 终端 → 编码 → UTF-8
  • SecureCRT → Session Options → 编码 → UTF-8

三、日志文件本身编码不对

情况 1:Go 里直接写中文

Go 默认是 UTF-8 源码

log.Println("服务启动成功")

✅ 正确 ❌ 但如果你用 GBK 工具编辑过 .go 文件 → 乱码

检查:

file main.go

如果不是:

main.go: UTF-8 Unicode text

重新用 UTF-8 保存。


四、把日志重定向到文件后乱码

./app > app.log

然后 Windows 用记事本打开 → 乱码

✅ 原因:

  • 文件是 UTF-8
  • 记事本默认不是 UTF-8

✅ 解决:

  • 用 VS Code / Notepad++ / Vim
  • 或强制转换:
iconv -f UTF-8 -t GBK app.log > app_gbk.log

五、日志库本身输出不是 UTF-8(少见)

如果你用了:

  • 第三方库
  • CGO
  • 调用 shell 命令

例如:

exec.Command("some_tool")

而 some_tool 输出 GBK

✅ 解决(转码):

import "golang.org/x/text/encoding/simplifiedchinese"

// GBK -> UTF-8

六、CentOS 7 / 8 常见问题总结

场景 原因
控制台乱码 终端编码不是 UTF-8
文件乱码 打开工具编码不对
中文日志乱码 LANG 不是 UTF-8
命令输出乱码 外部程序非 UTF-8

七、快速自检清单 ✅

locale
file main.go
echo $LANG

并确认:

  • 编辑器 UTF-8
  • 终端 UTF-8
  • 日志 viewer UTF-8

如果你愿意,可以把:

  • 乱码截图
  • locale 输出
  • Go 日志代码片段

发出来,我可以直接帮你定位是哪一层出的问题。

0 踩