Sublime Text 不支持项目级编码设置,因 default_encoding_on_save 等编码参数仅全局生效且被项目配置忽略;可行方案是用 ConvertToUTF8 插件按文件路径正则匹配编码,并手动执行 Reopen with Encoding 和 Save with Encoding 完成转码。

Sublime Text 本身不支持“每个项目独立设置默认编码”,default_encoding_on_save 和 fallback_encoding 是全局配置项,写在用户设置里就对所有文件生效——想靠改项目配置文件实现“项目A用UTF-8保存、项目B强制GBK”,行不通。
为什么项目 settings 里配 encoding 没用
Sublime 的 .sublime-project 文件中 settings 字段只接受编辑器行为相关的键,比如 tab_size、spell_check。但所有和“文件读写编码”挂钩的配置(default_encoding_on_save、fallback_encoding、convert_on_load)都不在白名单内,写进去会被直接忽略。
常见错误现象:
- 在项目配置里写了
"default_encoding_on_save": "GBK",保存文件时右下角仍显示 UTF-8,且实际写入磁盘的是 UTF-8 - 以为加了
"fallback_encoding": "Chinese (GBK)"就能自动识别项目内所有旧文件,结果打开某个 .txt 还是乱码
根本原因:这些编码控制逻辑在 Sublime 内核层启动时就已加载,不随项目切换而重载。
真正可行的多项目编码隔离方案
要让不同项目“感觉上”用了不同编码规则,只能靠插件级干预,目前唯一稳定可用的是 ConvertToUTF8,但它不是靠项目配置驱动,而是靠文件路径匹配 + 手动开关:
- 安装后,在
ConvertToUTF8.sublime-settings(用户级)中启用detect_files_by_name,例如:"detect_files_by_name": [ ["legacy_config\.ini$", "GBK"], ["README_zh\.md$", "GB2312"] ]匹配文件名正则,命中即按指定编码加载 - 关闭
convert_on_save,改用save_to_original_encoding: false,这样编辑后统一存为 UTF-8,避免污染原始编码 - 对必须保留 GBK 的项目,手动执行
File → Save with Encoding → Chinese (GBK),再关掉convert_on_load防止下次误转
注意:detect_files_by_name 的正则基于完整路径,Windows 下反斜杠要写成 \ 或用原始字符串(如 r"config\legacy.ini$")。
状态栏点击 UTF-8 不等于转换编码
很多人误以为在状态栏点一下 UTF-8,再点 GBK,就能把当前文件从 UTF-8 转成 GBK——这是最危险的操作误区:
- 点击只是让 Sublime **重新用新编码解析内存中的字节流**,不修改磁盘内容,也不做任何编码转换
- 如果原文件是 GBK 编码、你点成 UTF-8,中文会变乱码;此时再点回 GBK,内容恢复,但光标位置、折叠状态全丢
- 真正转码必须走
File → Reopen with Encoding(重读)→ 编辑 →File → Save with Encoding(另存)两步,缺一不可
这也是为什么不能依赖状态栏切换来管理多项目:它不持久、不记录、不联动保存行为。
ConvertToUTF8 在 Sublime Text 4 中的兼容边界
ST4 对插件 API 做了调整,ConvertToUTF8 的部分功能在新版中表现异常:
- 自动检测可能失效:某些 GBK 文件打开后仍显示为乱码,需手动
Reopen with Encoding触发一次,插件才开始后续监听 -
max_detect_lines默认 600 行,但 ST4 的 buffer 加载机制变化可能导致前几行没被采样,建议调高到1000 - 插件不会修改
.sublime-project,所有路径规则必须写在用户级ConvertToUTF8.sublime-settings,且每次修改后要重启 Sublime 才生效
如果你的项目里混着 UTF-8(带 BOM)、UTF-8(无 BOM)、GBK、BIG5 四种文件,别指望一个配置全搞定。得先用 file 命令或 VS Code 看清真实编码,再针对性配 detect_files_by_name ——漏掉一种,那个文件就永远是乱码。











