vscode新建文件乱码是因为默认使用系统区域设置编码(如windows中文版为gbk),而非utf-8;需在settings.json中设置"files.encoding":"utf8"、"files.autoguessencoding":false及"files.defaultlanguage":"plaintext"三者缺一不可。

VSCode新建文件乱码,不是文件坏了,而是它根本没用UTF-8创建——你看到的“新建文件”默认编码其实是系统区域设置决定的,Windows中文版下大概率是GBK,必须手动覆盖。
为什么新建文件一输中文就变方块?
VSCode新建空文件(如Ctrl+N)时,不读BOM、不猜内容,直接按files.encoding值写入;但如果你没设过这个值,它会 fallback 到操作系统默认代码页(Windows 中文版 = CP936/GBK)。所以你敲“你好”,实际存的是GBK字节,再被UTF-8解释器读,必然显示为“浣犲ソ”或方块。
-
files.encoding必须设成utf8(全小写、无短横、无BOM),写成UTF-8或UTF8VSCode 直接忽略 - 该设置只影响「全新空白文件」和「无BOM且未被打开过的文件」,对已有文件完全无效
- 如果项目里混了必须用GBK执行的
.bat或.reg,别全局硬设,改用files.associations单独配
怎么正确设置全局默认编码?
打开命令面板(Ctrl+Shift+P),输入并选择 Preferences: Open Settings (JSON),在 settings.json 里加这三行:
{
"files.encoding": "utf8",
"files.autoGuessEncoding": false,
"files.defaultLanguage": "plaintext"
}
files.autoGuessEncoding 设为 false 很关键:VSCode 的自动猜测对GBK基本失效,反而常把GBK误判为iso88591,导致新建文件一输中文就乱。
- 不要依赖“自动检测”,它对中文编码识别率极低
-
files.defaultLanguage防止新建文件被错误关联到某语言模式(比如某些插件会把无后缀文件当Python处理,触发额外编码逻辑) - 改完不用重启,新按
Ctrl+N创建的文件立刻生效
新建文件还是乱码?检查这三个地方
即使设了files.encoding,以下情况仍会导致新建文件乱码:
- 你在某个工作区(
.vscode/settings.json)里覆盖了files.encoding,且值不是utf8 - 你装了“Auto Rename Tag”或“Path Intellisense”之类插件,它们可能劫持新建行为并强制用系统编码
- 你用的是旧版 VSCode(files.encoding 对
Ctrl+N支持不完整,升级到最新版即可
验证是否生效:按 Ctrl+N → 输入“测试中文” → Ctrl+S 保存为 test.txt → 关闭再重开,看是否仍正常显示。如果关掉重开后乱码,说明文件被存成了GBK,证明files.encoding没生效。
终端里print("中文")还是方块?这不是文件编码问题
这是 PowerShell/CMD 自身输出通道和 Python 解释器之间的编码断层,调files.encoding毫无作用。
- 临时修复:在集成终端里运行
chcp 65001,再跑 Python 脚本 - 永久修复:在用户级
settings.json加"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"} - PowerShell 用户还需在
$PROFILE里加一行:[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
真正容易被忽略的是:files.encoding 只管“怎么存”,不管“怎么输出”。终端乱码和编辑器乱码是两套独立机制,混着调只会互相干扰。











