必须开启 code-runner.runInTerminal,否则 Output 面板因无编码协商能力,会用 CP936 错解 UTF-8 字节导致乱码;启用后输出走真实终端,复用系统编码配置,是最简可靠解法。

必须开启 code-runner.runInTerminal,否则所有其他配置都是临时补丁,且大概率失效。
为什么 Output 面板一定会乱码
Code Runner 默认把 print("你好") 的字节流直接写进 Output 面板,不启动 shell、不读取 PYTHONIOENCODING、不协商编码——Windows 下它硬用 CP936(GBK)去解码 UTF-8 字节,结果就是 “浣犲ソ”。这不是文件编码问题,也不是字体问题,是 Output 面板本身无编码能力。Debug Console 同理,走的是另一套环境链,和终端无关。
启用终端运行是最简可靠的解法
勾选设置或在 settings.json 中加这一行即可:
"code-runner.runInTerminal": true
改完后按 Ctrl + Alt + N(Windows)会新开一个集成终端,而不是塞进 Output 面板。此时输出走真实终端,复用你已配好的:chcp 65001、PYTHONIOENCODING=utf8、终端字体等。
- 必须关闭所有已打开的终端窗口,再按
Ctrl + Shift + `新开一个,否则旧终端不加载新配置 - 如果终端里还是 □ 或 ?,检查三处硬点:
terminal.integrated.env.windows是否设了{"PYTHONIOENCODING": "utf8"}(注意小写、无横线)、终端字体是否含中文字体(如"Cascadia Code", "Microsoft YaHei")、Windows 终端属性里是否手动选了等宽中文字体
自定义 executorMap 是高风险操作
如果你非要留在 Output 面板里跑,就得靠 executorMap 做编码前置,但极易出错:
- Python:写成
"python": "set PYTHONIOENCODING=utf8 && python -u",漏掉-u(无缓冲)会导致部分输出卡住 - C/C++:需加
-finput-charset=UTF-8 -fexec-charset=GBK,但仅对 Windows CMD 有效;WSL 或 PowerShell 下反而可能翻车 - JS/Node:
node --utf8在 Node ≥20.12 才支持,旧版本无效;且--utf8不影响 stdout 编码,只是让process.argv正确解析中文参数
这些命令耦合系统、Shell 类型、Node/Python 版本,一旦换环境就失效。
别碰 files.encoding 和右下角编码切换
把文件存成 GBK 来“适配” Output 面板,是倒退。VSCode 编辑器本身完全支持 UTF-8,强行切 GBK 会导致 Git 提交异常、协作时换行符错乱、正则匹配失败。更糟的是,GBK 文件在终端里反而容易触发双解码——先被终端当 UTF-8 解,再被 Python 当 GBK 解,乱得更彻底。
真正关键的不是“文件怎么存”,而是“输出往哪走、由谁解码”。Output 面板天生不适合交互式程序,别把它当终端用。


















