sublime text无法单靠一个配置实现新建、打开、保存全utf-8,必须分三阶段配置:default_encoding_on_save设为"utf-8"强制ctrl+s以utf-8落盘;fallback_encoding在st4中已失效,需手动reopen with encoding→chinese (gbk)再save with encoding→utf-8;default_encoding仅影响新建文件显示和另存为默认选项,不控制实际编码行为。

Sublime Text 不能靠改一个配置就让新建、打开、保存全变成 UTF-8;必须分清三个阶段:新建文件用什么编码显示、打开无 BOM 文件时用什么编码去读、保存时强制写成什么编码——改错任何一个,都会在某个环节出乱码。
default_encoding_on_save 才真正控制 Ctrl+S 写入什么编码
很多人加了 default_encoding 就以为万事大吉,但它早在 Sublime 官方文档中标记为“已弃用”,只影响新建文件右下角显示的标识和另存为对话框默认选项,不决定磁盘写入行为。
-
default_encoding_on_save是唯一能强制覆盖保存逻辑的配置项,设为"UTF-8"后,每次按 Ctrl+S 都会把内存中的 Unicode 内容重新编码为 UTF-8 字节写入磁盘(无 BOM) - 拼写必须严格:不是
"utf-8"、"UTF8"或"UTF-8 with BOM",只有"UTF-8"有效 - 如果文件原本是 GBK,启用此项后保存 = 自动转码,无需弹窗确认
- 不设此项时,Sublime 默认沿用文件原始编码保存——这也是协作中“别人改完发你,一打开就乱”的根本原因
fallback_encoding 控制无 BOM 文件怎么打开(ST4 已失效)
Windows 下双击一个记事本存的中文 .txt 全是方块?不是因为没设对 default_encoding,而是 Sublime 拿 fallback_encoding 去解码了一个实际是 GBK 的字节流,两个字节当一个 UTF-8 字符读,必然崩坏。
- ST3 可设
"fallback_encoding": "GBK",让老项目里的中文文件一打开就正常显示 - ST4 已彻底移除该配置项,它内置一套不可修改的 fallback 列表(UTF-8 → UTF-16 → Windows-1252 → …),不会优先尝试 GBK
- 这意味着 ST4 中遇到乱码文件,必须手动:
Reopen with Encoding→Chinese (GBK)(注意括号里是界面名,不是配置项名),确认正常后再Save with Encoding→UTF-8 - 别信网上教程让你设
"fallback_encoding": "UTF-8"—— 这会让 GBK 文件更乱,且在 ST4 中完全被忽略
default_encoding 只管新建文件初始显示,但空文件保存不写入字节
新建文件右下角显示 UTF-8,不代表它磁盘上就是 UTF-8 编码;空文件保存后甚至没有字节可谈,而一旦输入中文再保存,ST 在底层仍可能按系统 ANSI(Windows 下即 GBK)落盘。
- 设
"default_encoding": "UTF-8"确保 Ctrl+N 新建文件右下角显示UTF-8,并影响另存为对话框默认选中项 - 但这个值不参与保存逻辑,尤其在 ST4 中,它的作用进一步弱化
- 新建文件后直接保存(没输任何内容)→ 磁盘无字节 → 下次打开时 Sublime 无法识别编码 → 回退到 fallback 列表 → 很可能误判为 Windows-1252
- 所以真正要保证新建即 UTF-8,必须配合
default_encoding_on_save,否则只是“看起来对”
状态栏点击编码名 ≠ 转码,盲目操作会让乱码更严重
右下角显示 Western (Windows 1252),点它再选一次 UTF-8,不会让 GBK 文件变正常——这只是让 Sublime 拿 UTF-8 规则再解一遍错的字节,越点越乱。
- 状态栏点击只改变当前视图的解码方式,不修改磁盘字节,也不触发任何转换逻辑
- 若文件实际是 GBK,却先点
UTF-8,再点Save with Encoding→UTF-8,Sublime 会把已被错误解析过的乱码内容再编码回 UTF-8,结果是双重乱码,不可逆 - 正确流程只能是:
Reopen with Encoding→ 正确编码(如Chinese (GBK))→ 确认中文显示正常 →Save with Encoding→UTF-8 - 插件如
ConvertToUTF8的convert_to_utf8_on_save配置是私有字段,原生 Sublime 不识别,加了也无效
最易被忽略的一点:ST 对“文件编码”的认知是动态的——它记住的是你上次打开时识别出的编码,而不是设置里写的什么。所以哪怕所有配置都设对了,只要曾用 GBK 打开过某个文件,下次保存时它仍会优先按 GBK 写入,除非你显式干预保存动作或启用 default_encoding_on_save 强制覆盖。











