vscode终端中文乱码需同步配置三要素:在settings.json中设"terminal.integrated.env.windows": {"pythonioencoding": "utf8"},配置"terminal.integrated.profiles.windows"使powershell启动时执行chcp 65001,并设置"terminal.integrated.fontfamily": "'cascadia code', 'microsoft yahei', 'simsun', monospace";改后必须重启vscode,否则旧进程环境不刷新。

终端里 print("中文") 显示方块或问号,但 echo 你好 正常
说明 shell 本身能渲染中文,问题出在 Python 启动时没把 sys.stdout.encoding 设成 utf8。Windows 下 Python 默认读系统代码页(通常是 cp936),而 VSCode 终端实际用 UTF-8 解析字节流,两边对不上。
- 先验证:
python -c "import sys; print(sys.stdout.encoding)",输出cp936就是它 - 在
settings.json中加这一行(注意大小写和引号):"terminal.integrated.env.windows": {"PYTHONIOENCODING": "utf8"} - 别设
terminal.integrated.encoding—— 这个字段已弃用,设了也没用 - 改完必须关闭所有终端 tab,再新开——旧进程环境不会刷新
chcp 输出 活动代码页: 936,且 echo 也乱码
这是终端进程根本没走 UTF-8 路径,不是 Python 的事。VSCode 默认只是调起 powershell.exe 或 cmd.exe,没主动切代码页。
- 必须在
settings.json中配置terminal.integrated.profiles.windows,确保每次启动都执行chcp 65001 - PowerShell 推荐写法:
"args": ["-NoExit", "-Command", "chcp 65001 > $null"]——-NoExit必须有,否则终端启动完就退出 - cmd 写法:
"args": ["/K", "chcp 65001"]——/K保证命令执行后保持终端打开 - 如果已有
terminal.integrated.profiles.windows字段,直接合并对象,别重复声明导致 JSON 解析失败 - 改完必须重启 VSCode,只重启终端不够——旧 shell 进程环境已固化
终端显示方块、空白或小方框,但 chcp 和 PYTHONIOENCODING 都对了
这是字体链没兜住中文,和编码无关。Consolas、Fira Code 等主流等宽字体默认不含 CJK 字形,渲染时 fallback 失败就出方块。
- 在
settings.json中显式指定中文字体链:"terminal.integrated.fontFamily": "'Cascadia Code', 'Microsoft YaHei', 'SimSun', monospace" - 引号必须成对,中文字体名要用单引号包裹,多个字体用英文逗号分隔
- 避免只写
"Microsoft YaHei"——缺少备选字体时,遇到 emoji 或 CJK 扩展区字符会回退到方块 -
terminal.integrated.fontFamily影响的是显示,不是解码;即使编码全对,字体不对照样出方块
Debug Console / Output 面板里中文是乱码,但终端正常
Debug Console 和 Output 面板走的是 VSCode 自己的通信通道,不经过终端,也不读 terminal.* 配置。它们依赖 Node.js 层的编码感知,而 Windows 上 Node 默认不启用 UTF-8 模式。
- 在
settings.json中补:"terminal.integrated.env.windows": {"NODE_OPTIONS": "--experimental-strip-ansi"}不够,真正有效的是全局设置系统区域:打开「控制面板 → 区域 → 管理 → 更改系统区域设置」,勾选「Beta 版:使用 Unicode UTF-8 提供全球语言支持」,重启电脑 - 该设置影响所有基于 Windows 控制台 API 的程序(包括 Node.js 子进程),是 Debug Console 正确解析中文的底层前提
- VSCode 1.118 及以后版本仍需此系统级配置,仅靠编辑器设置无法覆盖 Node.js 默认行为











