default_encoding仅控制新建空白文件和“另存为”时的初始编码,不决定Ctrl+S保存编码;ST4已弃用该设置,保存行为由default_encoding_on_save控制。

default_encoding 是新建文件的“初始标签”,不是保存编码
很多人以为设了 default_encoding 就能控制所有行为,其实它只在两个时刻起作用:新建空白文件时、执行“另存为”(Save As)时。它不决定你按 Ctrl+S 保存时用什么编码——那是 default_encoding_on_save 的职责。
Sublime Text 4 已明确标注 default_encoding 为“已弃用”,但保留兼容;ST3 用户仍可设为 "UTF-8",不过要注意:
- 它不会给新建文件写 BOM,右下角显示 UTF-8 ≠ 文件磁盘字节是 UTF-8
- 如果新建后没输任何字符就直接保存,Sublime 可能跳过编码确认流程,实际写入的是系统 locale 编码(Windows 上常为 GBK)
- 不要设成
"UTF-8 with BOM"—— Sublime 原生不识别这个字符串,会静默失效
fallback_encoding 在 ST3 有效,在 ST4 已被移除
如果你用的是 Sublime Text 3,fallback_encoding 是解决旧文件乱码的关键:它告诉 Sublime “当文件没 BOM、也没声明编码时,优先拿什么编码去试”。中文环境建议设为 "GBK",而不是 "UTF-8"——否则打开记事本存的 GBK 中文文件,会把两个字节当一个 UTF-8 字符解,满屏方块。
但 Sublime Text 4 彻底移除了 fallback_encoding。它现在依赖三步判断顺序:
- 是否有 BOM(有则按 BOM 解)
- 是否匹配内置的 detect_indentation 规则(名字误导,实际是编码启发式检测)
- 最后才进硬编码 fallback 列表(不可配置)
所以 ST4 用户别再往用户设置里加 fallback_encoding,它会被忽略。
真正影响保存行为的是 default_encoding_on_save 和 save_with_encoding
想确保每次按 Ctrl+S 都走 UTF-8?必须配 default_encoding_on_save:
- 设为
"UTF-8":保存动作默认使用 UTF-8 编码写入(带或不带 BOM 由你另选) - 设为
"UTF-8 with BOM":无效,Sublime 不支持该值,会回退到系统 locale - 没设此项时,Sublime 默认沿用当前文件已识别的编码保存——也就是你上次
Reopen with Encoding选的那个
另外,save_with_encoding 是菜单命令触发的强制转码保存,它会真正做字符集转换(比如 GBK → UTF-8),不是覆盖写入。操作前务必确认内容显示正常,否则转的是错解后的垃圾字节。
状态栏点击编码名只是重解析,不改文件也不转码
右下角点一下 UTF-8 或 GBK,Sublime 只是用新规则重新解释内存里的原始字节流,不读磁盘、不写磁盘、不转换编码。这很危险:
- 原文件是 GBK,你点成 UTF-8 → 显示乱码
- 再点回 GBK → 内容恢复,但字节没变
- 此时若直接
Ctrl+S,可能按default_encoding_on_save写成 UTF-8,结果把乱码字节当 UTF-8 存了
正确流程永远是:先 File → Reopen with Encoding → Chinese (GBK) 看是否恢复正常 → 确认无误后再 File → Save with Encoding → UTF-8。跨平台协作中,这个顺序漏一步,Git diff 就全是问号。











