最稳解法是将 launch.json 中 "console" 字段设为 "integratedterminal",因其支持 utf-8、响应环境变量和 chcp,避免 debug console 因编码不兼容导致的中文乱码、input 卡死等问题。

直接改 launch.json 里的 "console" 字段,设成 "integratedTerminal",这是最稳、最省事的解法。别在 Debug Console 里硬刚编码问题——它不读环境变量、不继承终端设置、也不响应系统代码页,纯属“封闭输出通道”。
为什么 Debug Console 一定会乱码(尤其 Windows)
VSCode 汉化插件只改菜单和设置项文字,不影响底层 I/O 编码逻辑。但汉化后你更常盯着 Debug Console 看 print() 或变量值,而它在 Windows 上默认 fallback 到系统 locale(中文版即 GBK),和 Python/Node.js 运行时默认 UTF-8 输出天然冲突。现象是中文变 ???、整行错位,甚至 input() 直接卡死。
-
Debug Console不解析文件 BOM,也不读files.encoding配置 - 即使你在终端里执行
chcp 65001,对Debug Console完全无效 -
sys.stdout.reconfigure(encoding='utf-8')仅对 Python 3.7+ 有效,且只在运行时生效,无法覆盖Debug Console的封装层
改 launch.json:强制输出走集成终端
这不是绕开问题,而是绕开设计缺陷。集成终端(Integrated Terminal)支持 ANSI、可交互、编码可控,且能响应 chcp 和环境变量。
- 打开项目根目录下的
.vscode/launch.json - 找到对应配置(如
Python或C++的configurations数组项) - 确保包含:
"console": "integratedTerminal" - 删掉或注释掉过时写法:
"console": "internalConsole"(旧版 Python 扩展常用) - 保存后按
F5重启调试——此时所有print()、input()、日志颜色都正常
非要用 Debug Console?那就 runtime 强制重定向
仅限 Python 3.7+,且必须加在入口脚本最开头(比如 if __name__ == '__main__': 前面),因为 Debug Console 的 sys.stdout 是个封装对象,不响应环境变量,但能被代码现场重置:
import sys
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8')
print("你好世界")
- 此方法不能解决 C/C++ 的
printf乱码,GDB 层无对应 API - 若项目用
logging,需额外对handler.stream同样调用reconfigure - 一旦调试器断在重置前,依然会乱码——所以不如直接切终端
真正容易被忽略的是:哪怕你改了所有配置,只要误点进 Debug Console 标签页,乱码照旧。调试时盯紧底部面板标签,别被那个“Debug Console”名字带偏——它不是“调试用的控制台”,而是“VSCode 自己造的一个不兼容的输出窗口”。











