必须同时设置"files.encoding":"utf8"和"files.autoGuessEncoding":false,否则VSCode仍会按内容或系统区域自动猜测编码(如GBK),导致新建文件加BOM或旧文件乱码;已有带BOM文件需手动Save with Encoding→UTF-8清除。

VSCode 默认不会强制用 UTF-8(无 BOM)保存文件,除非你明确关掉自动猜测、并设对 encoding 值;否则它可能在新建文件含中文时加 BOM,或打开旧文件时回退到 GBK/ISO-8859-1。
为什么改了 files.encoding 还是带 BOM?
因为 files.autoGuessEncoding 是 true 时,VSCode 会无视 files.encoding 的设置,优先根据文件内容或系统区域“猜”编码。尤其在 Windows 中文环境下,新建文件粘贴过中文后首次保存,极易被推测为 utf8bom。
- 必须把
files.autoGuessEncoding设为false,这是最常漏的一步 -
files.encoding的值必须是"utf8"(小写,无连字符),不是"UTF-8"、"utf8bom"或"auto" - 如果已存在带 BOM 的文件,VSCode 打开后右下角显示 “UTF-8 with BOM”,此时改设置无效——得先点它 →
Save with Encoding→ 选UTF-8手动清除
工作区设置覆盖用户设置怎么办?
VSCode 的配置优先级是:工作区(.vscode/settings.json) > 用户设置 > 默认值。很多项目根目录下已有 .vscode/settings.json,里面可能写着 "files.encoding": "utf8bom" 或没关 autoGuessEncoding,导致全局设置失效。
- 打开项目根目录,检查是否存在
.vscode/settings.json - 搜索该文件里是否含
files.encoding、files.autoGuessEncoding、charset(来自 .editorconfig)等字段 - 若存在,统一改为:
"files.encoding": "utf8"和"files.autoGuessEncoding": false - 临时验证:按
Ctrl+Shift+P→Developer: Inspect Editor Tokens and Scopes,看右下角显示的当前文件编码是否为UTF-8
自动保存时 BOM 突然“复活”了?
这不是错觉。当 files.trimTrailingWhitespace 开启 + 文件原本带 BOM + files.autoSave 设为 afterDelay 或 onFocusChange,VSCode 可能在自动保存时保留原始编码,哪怕你设置了 files.encoding: "utf8"。
- 关闭
files.trimTrailingWhitespace测试是否还复现 - 推荐把
files.autoSave改成"onWindowChange",避免编辑中途触发编码混淆 - 某些插件(如旧版
Auto Rename Tag)也会触发后台保存,且不尊重你的 encoding 设置——可临时禁用所有插件测试
真正起效的配置只有两行,但容易被工作区、插件、历史文件状态层层覆盖;别只改一次就以为万事大吉,重点盯住右下角状态栏显示的实际编码,那才是 VSCode 当前真正用的格式。


















