核心问题是插件执行环境未告知底层进程用utf-8解码输出;需在settings.json中配置pythonioencoding=utf8等环境变量,并确保终端、文件、字体四层均对齐utf-8。

插件运行脚本时中文乱码,核心问题不在文件编码,而是执行环境没告诉底层进程“用 UTF-8 解码输出”。你改了 files.encoding、保存为 UTF-8、甚至装了中文语言包,都解决不了——因为那是编辑器读文件的事;而插件(比如 Code Runner、Python 插件、Task 运行器)调用的是系统 shell 或 Node.js/Python 进程,这些进程默认根本不认中文。
Code Runner 执行 C/Python 脚本输出中文乱码
这是最典型场景:写了个 printf("你好"); 或 print("你好"),终端里显示“浣犲ソ”或空格方块。
- Windows 下根本原因是 cmd/powershell 默认代码页是 GBK(
chcp 936),而脚本按 UTF-8 编写,直接执行就错位 - 只在
code-runner.executorMap的命令前加chcp 65001 &&是临时解法,但不稳定:某些情况下会被重置,且不适用于 PowerShell - 更可靠的做法是在
settings.json中配置环境变量:"code-runner.terminalRoot": "C:\Windows\System32\cmd.exe",<br>"code-runner.runInTerminal": true,<br>"code-runner.executorMap": {<br> "python": "set PYTHONIOENCODING=utf8 && python",<br> "c": "chcp 65001 >nul && gcc $fileName -o $fileNameWithoutExt && ./$fileNameWithoutExt"<br>} - 注意:
set PYTHONIOENCODING=utf8对 Python 有效,但对 C 程序无效——C 的printf输出是否乱码,取决于编译器和运行时环境,GCC 本身不处理编码,得靠终端承接
Output 面板里插件日志中文全变成 或空格
比如 ESLint 报错信息、Language Server 启动日志里的中文全是方块或问号,这不是终端问题,是 VSCode 插件宿主(Extension Host)的 Node.js 进程没启用 UTF-8 支持。
-
files.encoding和terminal.integrated.env.*对 Output 面板完全无效 - Node.js ≥18.17+ 才支持
--experimental-utf8,但 VSCode 自带的 Node 版本往往不满足(目前稳定版仍捆绑 v18.15 左右) - 真正生效的方案只有两个:
– 在系统级环境变量中设置NODE_OPTIONS=--experimental-utf8(需重启 VSCode)
– 或让插件开发者在代码里显式调用process.stdout.setEncoding('utf8')(你无法控制,只能提 issue) - 临时绕过:把 Output 面板内容复制出来,粘贴到记事本或浏览器里看——那里的 UTF-8 渲染是正常的
插件配置 JSON 文件里写中文注释后变 u4f60u597d
典型于 .eslintrc.json、settings.json 里加中文说明,保存后打开全是 Unicode 转义,甚至报错 Invalid UTF-8 byte sequence。
- VSCode 右下角状态栏显示的编码不是真实保存编码——它可能显示 “UTF-8”,但实际是 “UTF-8 with BOM” 或 GBK
- 必须手动操作:
– 点击右下角编码名称 → 选Reopen with Encoding→UTF-8
– 再点同一位置 →Save with Encoding→ 严格选UTF-8(不含 BOM) - 编辑器设置里的
files.autoGuessEncoding开启后反而容易误判,建议关掉 - Git 用户额外注意:
git config --global core.autocrlf false和i18n.commitEncoding utf-8也得配齐,否则拉代码时又回退成 GBK
最容易被忽略的一点:插件运行中文乱码,从来不是单点问题。它横跨文件编码、执行进程环境、终端渲染、字体 fallback 四层。改一个地方看着好了,换个插件或换台机器又崩——关键得确认每一层都对齐 UTF-8,而不是只修表面显示。











