output面板中文变问号的根本原因是node.js进程未启用utf-8模式,需设置系统级node_options=--experimental-utf8并重启vscode;code runner乱码可改executormap加chcp 65001或启用code-runner.runinterminal:true。

Output 面板中文变问号,和终端编码无关
VSCode 的 Output 面板(比如 Code Runner 输出、ESLint 日志、Python 测试结果)显示中文为 ? 或空格,不是因为 chcp 没设对,也不是文件保存编码错了——它压根不走终端链路,也不读 terminal.* 配置。根本原因是 VSCode 插件宿主进程(Extension Host)基于 Node.js 启动,而 Windows 上默认的 Node.js 进程不启用 UTF-8 模式,导致所有插件调用 console.log() 输出的中文被截断或转义失败。
必须改系统级 NODE_OPTIONS 环境变量
仅在 settings.json 里加 "terminal.integrated.env.windows" 对 Output 面板完全无效。真正起作用的是让 Node.js 进程启动时就加载 UTF-8 支持:
- Node.js ≥18.17 才支持
--experimental-utf8参数,旧版本会忽略 - 需在「系统属性 → 高级 → 环境变量」中,于「系统变量」或「用户变量」添加:
NODE_OPTIONS=--experimental-utf8 --no-warnings - 添加后必须彻底关闭 VSCode(包括后台进程),再重新打开,否则 Extension Host 仍沿用旧环境
- 验证方式:在 Output 面板点开任意插件日志(如 “Tasks”),输入中文内容;或运行一个带中文输出的自定义任务,看是否还出现
\u4f60\u597d转义
Code Runner 插件的 Output 乱码要单独处理
Code Runner 默认把执行结果塞进 Output 面板,但它的命令模板(code-runner.executorMap)不经过终端,也不受 NODE_OPTIONS 直接控制。如果改了环境变量仍乱码,说明它内部用了硬编码的输出封装:
- 打开设置 → 搜索
code-runner.executorMap→ 在 JSON 中编辑 - 找到
c或cpp对应的命令,把类似"cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"的字符串,改成:"cd $dir && chcp 65001 > nul && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - 注意:这里
chcp 650001是给子进程(即你的可执行文件)运行时的控制台环境用的,不是给 Output 面板本身 - 如果仍不行,换用
terminal模式:在settings.json加"code-runner.runInTerminal": true,强制走集成终端(此时就回归chcp + PYTHONIOENCODING那套)
JSON 配置文件里中文注释变乱码
这类问题常出现在 .eslintrc.json、launch.json 等配置文件中:你写了中文注释或提示,保存后变成 \u597d 或直接报错 Invalid UTF-8 byte sequence。这不是乱码,是 VSCode 试图用非 UTF-8 编码重写文件:
- 右下角点击当前编码(如
UTF-8),选Reopen with Encoding → UTF-8 - 再点同位置 →
Save with Encoding → UTF-8(关键:必须选「UTF-8」,不是「UTF-8 with BOM」) - 确认文件头部没有
EF BB BF字节(BOM),否则某些插件(如 ESLint)会拒绝解析 - 不要依赖自动检测:VSCode 有时会把带中文的 JSON 错判为 GBK,一保存就崩
最易被忽略的一点:Output 面板的乱码修复需要重启整个 VSCode 进程,而不是只关掉面板或重载窗口;而且一旦用了自定义 code-runner.executorMap,里面每处 chcp 都得手动加,它不会继承全局终端配置。











