根本原因是VS Code的Extension Host进程(基于Node.js)在Windows上默认未启用UTF-8模式,需通过系统环境变量设置NODE_OPTIONS=--experimental-utf8(Node.js≥18.17),并彻底重启VS Code生效。

Output 面板中文显示方块,不是字体问题
Output 面板(如 ESLint 日志、调试输出、语言服务器通信)里中文变成方块或空格,和 editor.fontFamily 无关,也和右下角显示的文件编码无关。这是 VS Code 的 Extension Host 进程(基于 Node.js)在 Windows 上默认未启用 UTF-8 模式导致的——它用系统 ANSI 代码页(如 CP1252)解码 stdout 字节流,而插件却按 UTF-8 输出,中间没协商,直接崩成 或空白。
必须设系统级 NODE_OPTIONS=--experimental-utf8
VS Code 不读 settings.json 里的 NODE_OPTIONS,只认系统环境变量。Node.js ≥18.17+ 才支持该参数,低于此版本无效。
- Windows:在“系统属性 → 高级 → 环境变量”中,**用户变量或系统变量**里新增:
NODE_OPTIONS=--experimental-utf8 - macOS/Linux:在
~/.zshrc或~/.bash_profile中添加:export NODE_OPTIONS="--experimental-utf8",然后source生效 - 改完后必须彻底退出 VS Code(包括托盘进程),再重启——仅“重载窗口”不生效
验证 locale.json 和语言包是否干扰
虽然 Output 面板乱码主因是 Node.js 编码,但若界面本身还是英文,说明 locale.json 没写对,可能连带影响部分插件 UI 渲染逻辑。
- 按
Ctrl+Shift+P输入Configure Display Language,**严格选zh-cn(小写、连字符)** - 确认
%APPDATA%\Code\User\locale.json(Windows)或~/Library/Application Support/Code/User/locale.json(macOS)存在且内容为:{"locale":"zh-cn"} - 如果路径下是
~/.vscode/locale.json(Linux 沙盒安装常见),说明装的是 Snap/Flatpak 版,NODE_OPTIONS可能被拦截,建议换官网 .deb/.rpm 包
插件自身没调用 setEncoding 是个隐藏坑
即使你配好了 NODE_OPTIONS,某些老插件(尤其非官方或 fork 版本)仍可能在 console.log() 前没显式声明编码,导致日志输出仍是乱码。
- 开发插件时,务必在入口文件顶部加:
process.stdout.setEncoding('utf8') - 排查时可临时在插件源码里搜
console.log,看附近有没有setEncoding调用 - 第三方插件无法改源码?只能等作者更新,或降级到已知兼容的 Node.js 版本(如 18.17~20.9)并配合
--experimental-utf8
最易忽略的是:Output 面板和集成终端是两套独立编码链,chcp 65001 或 terminal.integrated.env.windows 对 Output 面板完全无效。别在终端里验证成功就以为 Output 没问题——它们压根不走同一条路。


















