vscode 文件编码问题根源在于设置被覆盖或未生效;应设 user 级 files.encoding 为 utf8(小写无横线),关闭 files.autoguessencoding,并按语言 id 或 glob 配置编码规则。

VSCode 默认不强制统一文件编码,改错或设错会导致中文乱码、Git 提交失败、CI 构建报 invalid byte sequence in UTF-8——根本原因不是“没设”,而是设了但被覆盖、误判或没生效。
右下角点击编码名只能临时修复,不能一劳永逸
状态栏显示的 UTF-8 或 GBK 是当前文件的解析方式,点击后选 Reopen with Encoding 只是重读字节流,不改文件内容;选 Save with Encoding 才真正写入新编码。但这个操作不会影响下次新建文件,也不会同步到其他文件。
- 乱码时优先试
Reopen with Encoding → GBK(尤其 Windows 下老项目 .txt/.ini 文件) - 确认显示正常后,立刻点同一位置选
Save with Encoding → UTF-8,避免后续协作问题 - 如果点了
Save with Encoding → utf8bom,Git 会把 BOM 当作非法字符,CI 易报错
全局默认编码必须设为 utf8,且作用域为 User
files.encoding 设成 utf8(小写、无横线、无 BOM 标识)才是 VSCode 内部对 UTF-8 的标准写法;设成 UTF-8 或 utf8bom 都可能被忽略或触发意外行为。
- 打开
Ctrl + ,→ 切换到 User 标签页 → 搜files.encoding→ 设值为utf8 - 新建未命名文件(
Ctrl + N)右下角必须显示UTF-8,不是Auto或空白,才算生效 - 若仍显示
Auto,检查是否被工作区.vscode/settings.json覆盖:删掉其中的"files.encoding"字段
files.autoGuessEncoding 建议关掉
VSCode 启用自动猜测时,会扫描前 500 行字节做统计推断,对无 BOM 的 GBK 中文文件常误判为 UTF-8,结果一打开就乱码——而且它只在首次打开时猜一次,之后就固化错误认知。
- 搜
files.autoGuessEncoding→ 设为false - 已有乱码文件,手动
Reopen with Encoding → GBK后,再点右下角编码名 →Keep as GBK(此操作会为该文件单独记一个编码偏好,存在$HOME/.vscode/argv.json或窗口级缓存中) - 某些插件(如
File Utils)会在后台偷偷启用autoGuessEncoding,禁用插件后验证可快速定位
按语言或后缀指定编码要用 [language-id] 或通配符
VSCode 不识别 "*.js": "utf8" 这种写法,必须用语言 ID(如 [javascript])或完整 glob 模式(如 "**/*.log"),且需写在 settings.json 顶层,不能嵌套。
- 想让所有
.py文件默认用 UTF-8:加"[python]": { "files.encoding": "utf8" } - 想让项目里所有
.txt用 GBK:加"**/*.txt": { "files.encoding": "gbk" } - 语言 ID 查法:
Ctrl + Shift + P→ 输入Change Language Mode→ 看右下角括号里的名字(如plaintext、shellscript)
最易被忽略的是:新建文件(Ctrl + N)完全不读取项目级 .editorconfig 或 .vscode/settings.json,只认 User 级 files.encoding;而 Git 不处理编码,只依赖换行符和字节流,所以 .gitattributes 里加 * text=auto eol=lf 和执行 git add --renormalize . 必须同步做。











