GoLand文件编码必须设为无BOM的UTF-8:①Settings→Editor→File Encodings中全局、项目及properties编码均设UTF-8,取消Transparent转换;②Help→Edit Custom VM Options添加-Dfile.encoding=UTF-8并彻底重启;③已有GBK文件需用外部编辑器另存为UTF-8后在GoLand中Reload as UTF-8。

GoLand 里文件编码设成 UTF-8 的关键操作
GoLand 默认可能沿用系统编码(Windows 下常是 GBK),导致 .go 文件保存后字面量字符串在运行时就是损坏的,后续所有环节都救不回来。必须在编辑器层面锁死 UTF-8,且不含 BOM。
- 打开 File → Settings → Editor → File Encodings(macOS 是 Preferences)
- 把 Global Encoding、Project Encoding、Default encoding for properties files 全部设为
UTF-8 - 取消勾选 Transparent native-to-ascii conversion(它会偷偷把中文转成
\u4f60\u597d,干扰调试) - 右下角状态栏确认当前文件编码显示为
UTF-8,不是GBK或GB2312;若显示错误,点击切换并选Reload as UTF-8或Convert to UTF-8
为什么改了 Settings 还乱码?VM 选项也得同步
GoLand 启动 JVM 自己有一套默认编码,Settings 只管编辑器,不控制后台编译和运行环境。不改 VM 参数,go run 输出到控制台仍可能被错误解码。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 进入 Help → Edit Custom VM Options(首次会提示创建)
- 在打开的
.vmoptions文件末尾添加一行:-Dfile.encoding=UTF-8 - 保存后必须 完全退出 GoLand 再重启,仅 Reload 不生效
- 验证方式:新建空项目,写
fmt.Println("你好"),运行看控制台是否正常——若仍乱码,说明 VM 选项没生效或未重启
已有乱码文件怎么抢救
已经用 GBK 保存过的 .go 文件,字符串字面量内部字节就是错的,靠 Settings 或 VM 选项无法逆转。必须重载并转换内容。
- 先用 VS Code 或 Notepad++ 打开该文件,确认底部状态栏显示编码是
GBK(不是 UTF-8) - 在编辑器中选 Save with Encoding → UTF-8(注意不是 “UTF-8 with BOM”)
- 回到 GoLand,右下角点编码 →
Reload as UTF-8(不是 Convert) - 如果报错“Invalid UTF-8”,说明原文件有非法字节,需人工清理或用
iconv -f GBK -t UTF-8//IGNORE old.go > new.go过滤
别信右下角“UTF-8”就万事大吉
GoLand 状态栏显示 UTF-8 只代表它当前按 UTF-8 解析文件,并不保证文件磁盘上真是 UTF-8 编码。尤其从 Windows 记事本拖进来的文件,常带 BOM 或实为 ANSI(即 GBK)。
- 用命令行验证真实编码:
xxd main.go | head -1—— 若开头是ef bb bf,说明有 BOM;若开头是bd c2类似字节,大概率是 GBK 字节被当 UTF-8 显示 - 去 BOM:用
sed -i '1s/^\xef\xbb\xbf//' main.go(Linux/macOS)或 PowerShell:(Get-Content main.go -Raw) -replace "\xEF\xBB\xBF", "" | Set-Content main.go - 真要兼容记事本,写入 UTF-8 文件时才加 BOM;源码文件一律无 BOM,Go 规范如此
"你好" 就变成 "浣犲ソ"。

















