vs code 默认不强制编码,依赖bom或内容探测,无bom含中文易误判为gbk导致乱码;需全局设files.encoding为"utf8"、关闭autoguessencoding,并对旧文件手动reopen with encoding→utf-8再save with encoding写入bom。

VS Code 默认编码为什么总出乱码?
VS Code 本身不强制指定文件编码,它依赖文件 BOM(字节顺序标记)或内容特征自动探测——没 BOM、又全是 ASCII 字符时,大概率 fallback 到 UTF-8;但一旦含中文且无 BOM,某些场景下会误判为 GBK 或 ISO-8859-1,打开就变“”或“涓”。这不是 bug,是探测机制的保守策略。
- Windows 上新建的 .txt 文件常默认用
GBK编码保存,VS Code 打开时若没 BOM,就可能按UTF-8解读 → 显示乱码 - Git 提交后别人拉下来乱码?很可能是你本地存的是
GBK,但仓库约定是UTF-8,VS Code 没主动转码,只按原编码读 - 终端(如 PowerShell 或 Git Bash)输出中文乱码,往往和 VS Code 内置终端的
locale或chcp设置不匹配有关,不是编辑器编码问题本身
怎么永久设成 UTF-8 并避免探测翻车?
别只改「文件→首选项→设置」里的 files.encoding,那只是默认新建文件的编码。真正要稳,得组合三处:
- 全局设死:在设置里搜
files.encoding,值设为"utf8"(字符串,不是 utf-8) - 强制带 BOM:同时开启
files.autoGuessEncoding→ 关掉它(设为false),否则探测逻辑仍可能干扰 - 对旧项目补救:右下角状态栏点击当前编码(如
GBK),选Reopen with Encoding→UTF-8,再点另存为 →Save with Encoding→UTF-8(这步会写入 BOM,下次打开更稳)
Python / Node.js 脚本运行报 UnicodeDecodeError 怎么办?
错误信息像 UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 10,说明 Python 进程自己用系统默认编码(Windows 是 GBK)去读了 UTF-8 文件。VS Code 的编码设置管不了解释器行为。
- Python 脚本开头加
# -*- coding: utf-8 -*-只影响源码中的字符串字面量,不改变open()默认编码 - 稳妥写法:显式指定
open("xxx.py", encoding="utf-8"),别依赖默认 - Node.js 的
fs.readFile()同理,默认是utf8,但若文件真是GBK编码,就得用iconv-lite转,不能硬读
终端中文显示异常,改哪里?
VS Code 内置终端(Terminal)的编码和编辑器是两套体系。即使文件是 UTF-8,终端如果用 chcp 437(美式 DOS)或 chcp 936(GBK),照样打不出中文。
- Windows PowerShell:在设置里搜
terminal.integrated.defaultProfile.windows,确保指向PowerShell(不是 Command Prompt),再检查其$PSDefaultParameterValues是否干扰了输出 - 快速验证:在终端里运行
chcp,显示活动代码页: 65001才是 UTF-8;不是?手动执行chcp 65001 - 一劳永逸:在用户级 PowerShell 配置文件(
$PROFILE)里加一行chcp 65001 > $null
编辑器编码这事,表面是设置选项,实际是文件、编辑器、解释器、终端四层编码共识。少一层对齐,中文就容易“失踪”。最常被忽略的是:改完 VS Code 设置后,旧文件不会自动重编码,必须手动 reopen + save with encoding。










