sublime text 原生不强制新建或保存为 utf-8,光改 default_encoding 不够,必须配对设置 fallback_encoding 和 default_encoding_on_save 才能真正解决乱码问题;default_encoding 已弃用,仅影响新建文件显示标识和另存为默认选项,不控制实际保存行为,真正决定 ctrl+s 写入编码的是 default_encoding_on_save,而 fallback_encoding 控制无 bom 文件的打开解码策略,设为 gbk 可避免 windows 下中文文件误判为 windows-1252 导致乱码。

Sublime Text 原生不强制新建或保存为 UTF-8,光改 default_encoding 不够,必须配对设置 fallback_encoding 和 default_encoding_on_save 才能真正解决乱码问题。
为什么改了 default_encoding 还是乱码?
因为 default_encoding 在官方文档中已被标记为“已弃用”,它只影响新建文件的初始显示标识和另存为对话框的默认选项,不控制实际保存行为。你看到右下角显示“UTF-8”,不代表文件磁盘字节就是 UTF-8;空文件保存后甚至没有字节可谈。
- 真正决定“Ctrl+S 写入什么编码”的是
default_encoding_on_save(不是save_encoding或convert_to_utf8_on_save) -
fallback_encoding控制打开无 BOM、无声明编码的文件时怎么猜——Windows 下默认是Western (Windows 1252),一打开 GBK 文件就全乱,这才是日常乱码主因 - 网上流传的
"convert_to_utf8_on_save": true是 ConvertToUTF8 插件私有字段,Sublime 原生根本不识别,加了也无效
正确配置 Preferences → Settings – User
打开菜单 Preferences → Settings,在右侧用户设置中写入以下 JSON(注意逗号、引号、大小写):
{
"default_encoding_on_save": "UTF-8",
"fallback_encoding": "GBK",
"detect_indentation": false
}
-
default_encoding_on_save:设为"UTF-8"后,每次保存都强制以 UTF-8 编码落盘(无 BOM) -
fallback_encoding设为"GBK":让旧项目里的中文文本文件一打开就能正常显示,避免误判成 Windows-1252 - 不要加
default_encoding—— 它已弃用,且与default_encoding_on_save冲突时优先级更低 -
detect_indentation关掉:防止 Sublime 根据首行缩进反向推断并覆盖你的编码设置
已有乱码文件怎么救?别点状态栏瞎切
状态栏右下角点击编码名(如 Western (Windows 1252)),只是让 Sublime “用这个编码重新解码内存内容”,不改磁盘字节,也不转码。盲目点 UTF-8 可能把 GBK 字节当 UTF-8 解,结果更乱。
- 先确认原始编码:如果乱码但中文轮廓可见(比如“浣犲ソ”),大概率是 GBK → 点状态栏 →
Reopen with Encoding → GBK - 文字恢复正常后,再点状态栏 →
Save with Encoding → UTF-8,这才真正把 GBK 字节转成 UTF-8 字节写入磁盘 - 如果原文件是 UTF-8 with BOM,但显示异常,选
Reopen with Encoding → UTF-8即可,不用 Save with Encoding - 批量处理老文件?别靠 Sublime:用命令行,例如
iconv -f GBK -t UTF-8 file.txt > file_utf8.txt
插件要不要装?看场景
ConvertToUTF8 插件确实能自动识别 GBK 并以 UTF-8 方式显示,但它本质是“前端渲染层适配”,不是底层编码转换器。它的作用边界很清晰:
- 适合:频繁切换打开 GBK/UTF-8 混合项目的个人开发,省去手动 Reopen 步骤
- 不适合:需要 Git 提交干净 UTF-8、CI 构建校验、或交付给不装插件的同事——这些场景必须靠真实字节层面的
default_encoding_on_save - 它不修改
default_encoding_on_save行为,两者可以共存,但别指望插件帮你绕过配置 - 插件无法修复已损坏的双重乱码文件(比如被错误 Save with Encoding 过两次的)
最易被忽略的一点:所有这些设置都只生效于本地。团队协作时,.sublime-project 文件里配 "default_encoding_on_save": "UTF-8" 才算真正落地,否则别人打开照样乱。











