VSCode中文乱码本质是UTF-8编码链断裂:文件读取、终端输出、插件渲染、系统环境任一环节未对齐UTF-8,即出现方块、问号或“锟斤拷”;须按“Reopen with Encoding确认真实编码→Save with Encoding转存UTF-8→配置terminal.integrated.profiles.windows执行chcp 65001→设置NODE_OPTIONS=--experimental-utf8→显式指定editor.fontFamily中文字体”全流程修复。

VSCode中文显示异常不是单一问题,而是编码链上多个环节断裂的结果:文件读取、终端输出、插件渲染、系统环境四者只要有一处没对齐 UTF-8,中文就会变成方块、问号或乱码字串。
右下角编码显示为 GBK/GB2312 但内容乱码
这是最常见也最容易误操作的情况——文件实际是 GBK 编码,VSCode 却用 UTF-8 解码。直接点“Save with Encoding → UTF-8”会破坏原始字节,导致不可逆损坏。
- 先点右下角编码 →
Reopen with Encoding→ 选GBK或GB2312,确认中文恢复显示 - 再点同位置 →
Save with Encoding→UTF-8,把文件真正转成 UTF-8 格式 - 后续项目统一用 UTF-8,但在
settings.json中慎用全局"files.encoding": "utf8":老项目里的.ini、.reg、.bat文件依赖 GBK,硬设会引发执行失败 - 如需兼顾,改用
"files.associations": {"*.ini": "ini", "*.reg": "shellscript"}配合"files.encoding": "utf8",再单独为这类文件设置编码
终端(PowerShell/CMD)输出中文是 或空格
根本原因不是 VSCode 设置错了,而是 Windows 终端启动时没切换代码页,Python、Node.js 进程拿到的 sys.stdout.encoding 仍是 cp936。
- 在
settings.json中配置terminal.integrated.profiles.windows,确保 PowerShell 启动即执行chcp 65001 - 必须加
"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}:这个环境变量强制 Python 解释器用 UTF-8 处理 I/O,比在脚本里写sys.stdout.reconfigure()更可靠 - 别依赖
files.autoGuessEncoding:它对终端输出完全无效;chcp 65001也不影响插件 Output 面板,那是 Node.js 进程的事 - 验证是否生效:重启终端后运行
python -c "import sys; print(sys.stdout.encoding)",必须输出utf-8
插件界面/Output 面板中文是方块或 \u4f60\u597d
这不是字体或文件编码问题,是 VSCode 插件宿主(Extension Host)基于 Node.js 启动时未启用 UTF-8 模式,尤其在 Windows 上默认禁用。
-
Output面板乱码和terminal.*配置无关,files.encoding对它完全无效 - 若你开发插件,在入口文件顶部加
process.stdout.setEncoding('utf8'),比等 Node.js 自动识别更稳妥 - 非开发者只能靠系统级环境变量:在 Windows 系统属性 → 环境变量中添加用户变量
NODE_OPTIONS=--experimental-utf8(仅 Node.js ≥18.17 支持),旧版本需降级容忍 - 插件 UI 显示方块?检查
editor.fontFamily是否显式列了中文字体,例如"'Microsoft YaHei', 'SimSun', 'sans-serif'";单写SimSun在 Windows 上易错位,PingFang SC才是 macOS 正确写法
新建文件粘贴中文后保存变乱码
新建文件标称 UTF-8,但 Windows 系统区域设为中文时,部分底层 API 仍走 ANSI 路径写入,导致粘贴的中文被按 GBK 编码存盘。
- 新建文件后,立刻点右下角 →
Save with Encoding→UTF-8,再粘贴、再保存 - 永久解决:在
settings.json加两行:"files.autoGuessEncoding": false(关掉玄学猜测)、"files.encoding": "utf8"(强制新建即 UTF-8) - 注意:这不解决 Git 提交日志乱码,那是 Git 自身限制,需额外运行
git config --global i18n.commitEncoding utf-8 - 如果用了 WSL 或 Git Bash,别调 Windows 终端设置,直接进 Linux 子系统改
/etc/default/locale,VSCode 终端会自动继承
真正麻烦的从来不是某一个设置,而是不同层级的编码假设互相打架:文件层以为自己是 UTF-8,终端层坚持用 cp936,Node.js 进程又默认关闭 UTF-8 实验性支持——这时候只改一处,其他地方还在悄悄拖后腿。


















