必须同时设置"files.encoding":"utf8"、"files.autoGuessEncoding":false和"files.saveWithBOM":false,否则新建或打开无BOM中文文件仍会因自动猜测误判为GBK等编码而乱码;右下角显示GBK或ISO-8859-1即为典型表现,且猜测结果会被缓存,覆盖全局配置。

必须同时关闭自动猜测、设 files.encoding 为 utf8、禁用 BOM,否则新建文件或打开旧中文文件仍会乱码。
为什么改了 files.encoding 还是乱码?
因为 VSCode 默认开启 files.autoGuessEncoding,它会根据字节模式“猜”编码。一个没 BOM 的中文文本(比如记事本另存的 ANSI 文件),在 Windows 上大概率被猜成 gbk,完全无视你设的 "files.encoding": "utf8"。右下角显示 GBK 或 ISO-8859-1 就是典型表现。
这个猜测结果会被缓存,下次打开同一文件直接沿用,不会重新读配置。
-
utf8是 VSCode 内部标识,等价于 UTF-8 无 BOM;别写UTF-8或utf8bom,后者会插入 BOM,Python/Shell 脚本可能报SyntaxError: Non-UTF-8 code starting with '\xff' -
files.autoGuessEncoding: false是关键开关,关掉它,VSCode 才会老老实实按files.encoding读新文件、存所有文件 - 全局设置只对「未保存的新建文件」和「保存动作」生效;已有文件仍需手动处理
怎么一次性配全?
打开命令面板(Ctrl+Shift+P),执行 Preferences: Open Settings (JSON),在 {} 里加这三行:
{
"files.encoding": "utf8",
"files.autoGuessEncoding": false,
"files.saveWithBOM": false
}
保存后,新建文件默认就是 UTF-8(无 BOM);保存时也强制用 UTF-8 写入,不插 BOM。
- 不要写成
"UTF-8"或"UTF8",VSCode 会忽略,退回到默认行为 -
"files.saveWithBOM": false必须加——BOM(\xef\xbb\xbf)会让 Python、Node.js、Git 等工具出错,Shebang 行(如#!/usr/bin/env python3)开头有 BOM 直接报错 - 除非对接 PowerShell 5.1 等极老旧 Windows 工具,否则一律禁用 BOM
已有乱码文件怎么救?
右下角点击当前编码(比如显示 GBK),选「通过编码重新打开」→ UTF-8,确认后立刻点「保存」——这步必须做,否则下次打开还是 GBK。
- 不要点「以编码保存」再选 UTF-8,那只是另存为,原文件没变
- 如果文件已保存过,VSCode 会记住上次选择的编码,不依赖
files.encoding - 批量修复可用插件
Force Encoding,但手动点一次更稳妥,避免误操作
终端输出中文还是乱码?那是另一回事
files.encoding 对终端输出完全无效。VSCode 编辑器设成 UTF-8 不影响终端行为。终端里 print("中文") 显示方块或问号,是因为 Windows PowerShell / CMD 默认用 GBK(CP936)解析 stdout 字节流,而 Python 默认按 UTF-8 输出。
- 临时验证:在集成终端里先运行
chcp 65001,再执行脚本 - 永久生效:在
settings.json加"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"} - PowerShell 用户额外需在
$PROFILE里加:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 -
terminal.integrated.encoding已弃用,设了也无效
真正容易被忽略的点是:文件编码、终端输入/输出编码、进程环境变量、控制台代码页、字体支持——这五者必须全部对齐,缺一不可。调一个地方就以为搞定,大概率只是暂时掩盖了某一层的错配。


















