根本原因是Code Runner默认在非交互式Output面板执行代码,该面板不支持stdin输入且以系统locale(如Windows的GBK)解码UTF-8输出,导致“浣犲ソ”式乱码;唯一可靠解法是启用"code-runner.runInTerminal": true,强制其在集成终端中运行以复用终端编码与字体配置。

Code Runner 默认把 Python 输出扔进 Output 面板,而这个面板不协商编码、不继承环境变量,Windows 下硬用 GBK 解 UTF-8 字节流——所以“你好”必然变成“浣犲ソ”。唯一靠谱解法是让它走真实终端。
必须启用 code-runner.runInTerminal
Output 面板天生不支持 stdin、不读 PYTHONIOENCODING、不响应 chcp,改文件编码或加注释都没用。这不是 bug,是设计如此。
- 打开 VSCode 设置(
Ctrl + ,),搜索runInTerminal,勾选Code-runner: Run In Terminal - 或直接编辑
settings.json,加入:"code-runner.runInTerminal": true
- 改完后按
Ctrl + Alt + N,会新开一个集成终端窗口,而不是塞进 Output 面板
终端里还是乱码?检查这三处硬点
启用 runInTerminal 后仍乱码,说明终端环境没配齐。不是“可能有问题”,是这三点缺一不可:
-
terminal.integrated.env.windows必须显式设为:"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"}注意:大小写敏感,UTF-8或UTF8都无效 - 终端字体必须支持中文且为等宽:在设置中搜
terminal.integrated.fontFamily,填类似"Cascadia Code", "Microsoft YaHei", monospace;Windows 还要右键终端标题栏 → 属性 → 字体 → 手动选Cascadia Code(别用SimSun,它不是等宽字体) - 旧终端不加载新配置:关掉所有已开的集成终端,再按
Ctrl + Shift + `新开一个,否则环境变量和字体都不生效
自定义 executorMap 时别漏掉编码前置指令
如果你改过 code-runner.executorMap(比如给 Python 换命令),光写 python -u $fileName 不够,必须带编码环境:
- Python 正确写法:
"python": "set PYTHONIOENCODING=utf8 && python -u"
- C/C++ 类似:
"c": "set PYTHONIOENCODING=utf8 && cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
(注意:这里只是示例结构,实际 C 编译不用 PYTHONIOENCODING,但 Windows 下调用 cmd 时加 set 不影响) - 关键点:
set必须放在命令最前面,且不能换行;-u参数确保 Python 不缓冲输出,避免中文卡住
最容易被忽略的是:Output 面板和集成终端是两套完全隔离的执行环境,改了终端配置对 Output 面板零影响。很多人反复调 files.encoding 或重存文件为 GBK,其实从一开始就没打在正确链路上。


















