Sublime Text 4 中 default_encoding 已弃用,仅影响新建文件编码标识和“Save with Encoding”默认选项,不控制保存或打开行为;真正决定保存编码的是 default_encoding_on_save,必须设为 "UTF-8"(大小写及连字符严格匹配);ST4 移除了 fallback_encoding,打开无 BOM 的 GBK 文件会乱码,需手动 Reopen with Encoding → Chinese (GBK),再 Save with Encoding → UTF-8;ConvertToUTF8 插件可辅助批量处理,但需禁用冲突配置。

Sublime Text 4 用户:别再配 default_encoding 了,它已弃用,改了也不起作用;真正管保存行为的是 default_encoding_on_save,而“打开就乱码”是因为 ST4 彻底移除了 fallback_encoding,你配了也白配。
ST4 中 default_encoding 到底有没有用?
没有。官方文档明确标注为“deprecated”。它只影响两件事:新建空文件右下角显示的编码标识、以及“Save with Encoding”对话框的默认选中项。它不决定 Ctrl+S 写入磁盘的字节,也不影响已有文件的打开逻辑。
- 你加了
"default_encoding": "UTF-8",新建文件右下角显示 UTF-8,但输入中文后直接保存,Windows 下实际落盘仍是 GBK 字节(系统默认 ANSI) - 已有 GBK 文件双击打开,右下角显示
Western (Windows 1252)或空白,点状态栏切到 UTF-8 ≠ 文件就是 UTF-8,只是强行用 UTF-8 解那堆 GBK 字节,结果更乱 - 配置里同时存在
default_encoding和default_encoding_on_save,后者优先级更高,前者纯属干扰项
真正该配的只有 default_encoding_on_save
这个字段才是 ST4 中唯一能强制覆盖保存行为的开关。设成 "UTF-8" 后,无论当前文件原始编码是 GBK、BIG5 还是无 BOM 的 UTF-8,只要按 Ctrl+S,Sublime 就会把内存里的 Unicode 文本重新编码为 UTF-8(无 BOM)写入磁盘。
- 必须严格写成
"UTF-8"——"utf8"、"utf-8"、"UTF8"全部无效 - 它不改变打开方式,也不修复乱码显示,只管“落盘那一刻”
- 搭配
"save_with_bom": false使用,避免 Python 脚本报Non-UTF-8 code starting with '\xef' - 验证是否生效:保存后运行
xxd 文件名 | head -n1,输出不含ef bb bf才算干净
打开旧 GBK 文件还是乱码?ST4 没有 fallback 可配
ST4 移除了 fallback_encoding,打开无 BOM 的中文文件时,它按硬编码顺序尝试:UTF-8 → UTF-16 → Windows-1252 → …… GBK 不在其中。所以双击一个老 .txt,90% 概率直接误判为 Windows-1252,满屏方块。
- 不能靠设置解决,必须手动干预:右下角点击当前显示的编码(如
Western (Windows 1252))→ 选Reopen with Encoding→Chinese (GBK) - 确认中文正常显示后,再点右下角 →
Save with Encoding→UTF-8(注意不是UTF-8 with BOM) - 如果项目混着 UTF-8-BOM、GBK、ANSI 文件,没有银弹,得一个个查实锤、手动重开、再转存
要不要装 ConvertToUTF8 插件?看场景
如果你频繁处理大量历史 GBK 文件,且不愿每次手动 reopen/save,插件是实用选择。但要注意它和原生配置冲突:
- 装完插件后,务必删掉用户设置里所有
fallback_encoding行(ST4 已失效),也别留default_encoding - 插件的
convert_on_load设为true,才能让 GBK 文件双击就正常;convert_on_save设为true,保存时自动回写原编码(不是 UTF-8),这点和default_encoding_on_save完全相反 - 插件检测不是 100% 准确,尤其小文件或纯数字/英文内容,可能漏判 GBK;遇到疑似误判,仍要靠
file -i(Linux/macOS)或 Notepad++(Windows)确认真实编码
最麻烦的永远不是配置项怎么写,而是你根本不知道那个 .txt 文件当年是用记事本、Notepad++ 还是 VS Code 保存的,也不知道它带没带 BOM、有没有被 Git 自动转码过。别指望一次设置覆盖所有场景,先确认真实编码,再决定动配置还是动手动。


















