先用reopen with encoding选chinese (gbk)使中文正常显示,再执行save with encoding → utf-8真正转码保存;st4中fallback_encoding已失效,需设default_encoding_on_save为utf-8。

Sublime Text 本身没有“系统默认编码”这个概念,所谓“更改系统默认编码导致安装乱码”,其实是误把 Windows 系统区域设置(如“Beta: 使用 Unicode UTF-8 提供全球语言支持”)和 Sublime Text 的文件读取逻辑混为一谈。真正出问题的,是 Sublime Text 用 UTF-8 去解一个实际是 GBK 的字节流——而开启 Windows 的 UTF-8 全局选项后,部分旧程序(包括某些打包脚本或插件安装器)可能生成带 BOM 或混合编码的文件,让 Sublime 的自动检测更易出错。
为什么开了 Windows UTF-8 全局选项后乱码变多
Windows 开启 Beta: Use Unicode UTF-8 for worldwide language support 后,cmd/powershell 新建文本、某些批处理生成的文件会默认带 \xef\xbb\xbf BOM,但 Sublime Text 的 detect_encoding 机制在 ST4 中已弱化,遇到带 BOM 的 UTF-8 文件反而可能因 BOM 被截断或误判为其他编码(比如把 \xef\xbb\xbf 当作 GBK 的非法头字节),触发 fallback 失败。这不是 Sublime “变错了”,而是它更严格地遵守了编码规范:BOM 存在即代表 UTF-8,不该再试 GBK。
- 你看到的“安装乱码”,大概率是 Package Control 下载的插件元数据(如
Package Control.sublime-settings)或插件自身配置文件被错误识别为 GBK - 右下角显示
UTF-8却满屏方块?说明文件实际是 GBK,但 Sublime 因 BOM 或路径中含非 ASCII 字符,跳过了正确检测路径 - 关闭 Windows UTF-8 全局选项不能解决问题——它只影响新生成的系统级文本,不修复已存在的乱码文件
Reopen with Encoding 是唯一安全起点
别碰任何设置文件或插件配置,先救眼前乱码。打开那个显示“锟斤拷”的文件(比如 ConvertToUTF8.sublime-settings 或刚安装的插件 py 文件),立刻执行:
- 点击右下角当前编码名(通常是
UTF-8或Western (ISO 8859-1))→Reopen with Encoding→ 试Chinese (GBK) - 如果还是乱码,换
Chinese (GB2312);再不行就试Western (Windows 1252) - 只要中文一出来,右下角变成
Chinese (GBK),就停——这表示原始编码找对了 - 此时内存里是正确的 Unicode 内容,磁盘文件没动过,可放心编辑
Save with Encoding → UTF-8 才真正转码
确认中文能看清后,才是保存动作:
- 菜单栏
File→Save with Encoding→UTF-8(注意不是UTF-8 with BOM) - 保存后关闭文件,重新打开,右下角应显示
UTF-8,且中文不变形 - 如果别人用记事本打开仍是乱码,说明你第一步没识别对原始编码,或者该文件混用了 GB18030 变体(建议先用 Notepad++ 转一次再回 Sublime)
- ST4 用户注意:
fallback_encoding已失效,default_encoding_on_save才控制保存行为;设"default_encoding_on_save": "UTF-8"可避免 Ctrl+S 时意外写成其他编码
插件安装本身不会乱码,乱的是你加载的配置文件
Package Control 安装插件的过程是纯网络下载 + 解压,不涉及编码转换。所谓“安装乱码”,99% 是指你手动编辑插件的 .sublime-settings 文件,或插件自带的 README.md、messages.json 里含中文,而这些文件恰好是 GBK 编码。ConvertToUTF8 插件在 ST4 上基本不可靠——它停止更新多年,API 不兼容,常导致状态栏编码名消失、右键菜单无效,甚至干扰原生 Reopen with Encoding 流程。真要批量处理,不如用命令行:
iconv -f GBK -t UTF-8 input.json > output.json
或者直接用 VS Code 打开再另存为 UTF-8——它对混合编码的容错比 Sublime 更强。最易被忽略的一点:Sublime 的编码操作全在内存层,Reopen with Encoding 和 Save with Encoding 是两个完全独立的动作,顺序反了,文件就废了。











