根本原因是插件子进程(如python、gcc)与VSCode输出通道编码不一致,Windows默认GBK而VSCode倾向UTF-8;可靠解法是配置code-runner.runInTerminal:true强制走终端,或在executorMap中为命令前置chcp 65001 &&并添加PYTHONIOENCODING=utf-8环境变量。

插件输出窗口乱码,本质是子进程编码没对齐
VSCode 插件(比如 Code Runner、Python、C/C++)在“OUTPUT”面板里打印中文时出现“”或“锟斤拷”,不是文件编码问题,而是插件启动的子进程(如 python、gcc、node)和 VSCode 终端/输出通道之间的字符编码不一致。Windows 下尤其常见,因为系统默认是 GBK,而 VSCode 内部通信链路倾向 UTF-8。
Code Runner 运行 C/Python 时乱码:改 executorMap 加 chcp 65001
这是最直接有效的解法,适用于 Windows 用户运行本地命令行工具的场景:
- 打开 VSCode 设置(
Ctrl + ,),搜索code-runner.executorMap - 点击“在 settings.json 中编辑”,找到对应语言的执行命令,例如 C 语言默认是:
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - 在命令最前面插入
chcp 65001 &&(强制切换当前 cmd 会话为 UTF-8 模式):"c": "chcp 65001 && cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" - Python 同理:
"python": "chcp 65001 && python -u $fileName"(加-u是为了禁用 stdout 缓冲,避免中文输出延迟或截断)
Python 插件输出乱码:优先设 PYTHONIOENCODING 环境变量
VSCode Python 插件(ms-python.python)调用 python.exe 时,若未显式指定 I/O 编码,会继承系统默认编码(Windows 常为 cp936/GBK),导致 print 输出被错误解释。
- 在用户级
settings.json中添加:"python.defaultInterpreterPath": "你的 python 路径"(确保路径正确) - 再添加环境变量配置(对所有 Python 任务生效):
"python.envFile": "${workspaceFolder}/.env",然后在项目根目录建.env文件,写入:PYTHONIOENCODING=utf-8 - 或者更简单——直接在
settings.json的 Python 配置块中加:"python.terminal.launchArgs": ["-NoExit", "-Command", "$env:PYTHONIOENCODING='utf-8';"](PowerShell 场景)
终端输出正常但 OUTPUT 面板仍乱码:检查插件是否绕过终端
部分插件(如早期版本的 Code Runner)默认使用“内部执行器”而非真正启动终端进程,此时 chcp 和环境变量都无效,因为根本没走 cmd/powershell。
- 确认插件行为:在
settings.json中设置"code-runner.runInTerminal": true,强制它走真实终端 —— 这样你之前配的chcp和终端字体才起作用 - 如果必须用内部输出(比如想复用 OUTPUT 面板折叠功能),那就只能退一步:让代码自己处理编码,例如 Python 中加:
import sys; sys.stdout.reconfigure(encoding='utf-8')(Python 3.7+) - 注意:
sys.stdout.buffer.write()类底层操作不受此影响,仍需确保字节流本身是 UTF-8 编码
真正容易被忽略的是:OUTPUT 面板的编码逻辑和编辑器文件编码完全无关,也和界面语言包无关。它只取决于插件怎么启动子进程、子进程怎么读取环境、以及 VSCode 怎么解析那串字节流。所以别在“文件编码设置”里反复折腾,重点盯住 chcp、PYTHONIOENCODING、runInTerminal 这三个开关。











