goland远程控制台中文乱码源于编码链路断裂:远程环境locale未设utf-8且goland控制台未显式启用utf-8解码。需同时配置远程locale(如export lang=en_us.utf-8至~/.bashrc)与运行配置中勾选“use utf-8 encoding for console output”。

GoLand 控制台中文乱码不是 Go 程序写错了,而是字节流从进程发出后,在 IDE 的控制台面板里被错误解码了。 核心就两点:远程环境(SSH/WSL/Docker)的 locale 必须是 UTF-8;GoLand 控制台必须显式按 UTF-8 解码——缺一不可。
检查并修正远程环境的 locale
GoLand 启动的是非交互式 shell,它不会读取你手动执行过的 export。即使你在终端里 export LANG=zh_CN.UTF-8 后能正常显示,远程控制台仍会乱码。
- 登录远程环境(如
ssh user@host或进入 WSL),运行locale;若LANG或LC_ALL是C、空或POSIX,说明没启用 UTF-8 - 临时验证:执行
export LANG=en_US.UTF-8,再运行 Go 程序,看是否恢复 - 永久生效:把
export LANG=en_US.UTF-8和export LC_ALL=$LANG加入~/.bashrc或~/.zshrc - Docker 用户注意:
golang:alpine等精简镜像默认不带 UTF-8 locale,需在Dockerfile中加RUN apk add --no-cache tzdata && cp /usr/share/zoneinfo/UTC /etc/localtime并设ENV LANG=C.UTF-8
GoLand 远程运行配置中启用 UTF-8 控制台解码
这个设置不在「File → Settings → Editor → File Encodings」里,而是在每个运行配置中单独控制。改错地方等于白调。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 打开
Run → Edit Configurations,选中你的远程运行配置(如Go Build) - 勾选
Emulate terminal in output console——不勾这个,GoLand 就当纯字节流处理,连换行都可能错位 - 找到
Use UTF-8 encoding for console output(部分版本叫Override console encoding),务必勾选,并确认下拉框选的是UTF-8 - 不用重启 IDE,点
Apply → OK后直接重新运行程序即可
Windows 本地终端(CMD/PowerShell)也乱码?别只盯 GoLand
如果你在 GoLand 的内置 Terminal 里跑 go run 还是乱码,大概率是终端自身没切到 UTF-8,和 GoLand 配置无关。
- CMD:运行前先执行
chcp 65001,确认输出Active code page: 65001 - PowerShell:必须提前设置
$OutputEncoding = [System.Text.Encoding]::UTF8,否则即使chcp 65001也无效 - GoLand 内置 Terminal 默认继承系统终端行为,所以也要同步做上述设置;也可以在
Settings → Tools → Terminal里把 Shell path 换成已配好 UTF-8 的 PowerShell 或 WSL 实例
别漏掉源文件编码这个隐性起点
如果以上全对了还乱码,回头检查 .go 文件本身:Windows 上用记事本保存为「ANSI」,实际是 GBK,字符串字面量在编译时就已损坏。
- 用 VS Code 或 GoLand 打开文件,右下角确认显示为
UTF-8,点击切换并选Save with Encoding - 已有文件怀疑含 BOM:用
xxd main.go | head -1查看开头是否为ef bb bf;是则执行sed -i '1s/^\xef\xbb\xbf//' main.go去除 - Go 不需要也不支持 BOM,带 BOM 的文件可能导致某些工具解析异常
最容易被忽略的是:WSL 或 Docker 容器里改完 ~/.bashrc 后,GoLand 的远程会话并不会自动 reload shell 配置——它每次启动都是干净的非登录 shell,必须靠 ENV 或 /etc/profile.d/ 级别配置才能生效。










