sublime text 不支持真正批量编码转换,所有操作均为逐文件人工确认源编码;converttoutf8 插件仅处理当前打开文件,不遍历目录;批量转码须用命令行工具如 iconv,并先备份、验证再覆盖。

Sublime Text 本身不支持真正意义上的批量文件编码转换——所有“批量”操作,本质都是逐文件加载、识别、重编码、保存,且必须人工确认源编码;强行跳过识别直接转码,极易把 UTF-8 文件误当 GBK 再转一次,造成不可逆双乱码。
ConvertToUTF8 插件只管当前文件,不是批量工具
很多人装完 ConvertToUTF8 就以为能一键扫目录转码,其实它只响应「当前打开的文件」:
- 打开一个 GBK 文件 → 插件自动尝试用 GBK 解码并转成 UTF-8 内存表示 → 你按
Ctrl+S才真正写入 UTF-8 字节 - 它不扫描文件系统,不遍历目录,不记录原始编码,也不生成新文件
- 若文件实际是 UTF-8 with BOM 却被误判为 GBK,插件会把它当 GBK 解再转 UTF-8,结果就是中文变问号
-
convert_on_save设为true后每次保存都强制转 UTF-8,但对已有 UTF-8 文件也执行一遍,纯属多余甚至危险
真正批量转码得靠命令行,不是 Sublime 内部功能
想把整个 src/ 目录下所有 .js 和 .html 从 GBK 转 UTF-8,必须离开 Sublime,用系统级工具:
- Linux/macOS/WSL:直接用
iconv,例如find src -name "*.js" -exec iconv -f GBK -t UTF-8 {} -o {}.utf8 \; - Windows:用 Git Bash 或 WSL 运行同上命令;MSYS2 用户可装
iconv包 - 别用
-o覆盖原文件!先输出到新路径(如utf8_{}.js),验证无误再替换 - 转换前务必备份:
cp -r src src_backup,因为错判编码会导致内容损坏,无法还原
Sublime 里右下角显示的 “UTF-8” 不代表真实编码
状态栏右下角那个编码标识,只是 Sublime 自己记下的“最后一次手动指定的解码方式”,不是文件磁盘字节的真实编码:
- 用
file -i filename.js(Linux/macOS)看输出里的charset=才是实锤 - Windows 上可用 PowerShell:
Get-Content -Path "a.js" -Encoding UTF8 | Out-Null,不报错才算真 UTF-8 - 用
xxd a.js | head -5看开头三字节:如果是ef bb bf,才是带 BOM 的 UTF-8;否则得靠内容和上下文判断 - 即使你点了
Save with Encoding → UTF-8,如果之前没正确以 GBK 重新打开,内存里存的仍是错解字符,保存出来还是乱码
最易被忽略的一点:Sublime 的 UTF-8 选项默认是无 BOM 的,而某些旧 Windows 工具或嵌入式环境依赖 BOM 判断编码。如果你的项目要对接这类系统,得用 iconv -f GBK -t UTF-8-BOM 显式加 BOM,Sublime 原生不提供这个选项。











