vscode终端中文乱码主因是shell代码页、python io编码与终端字体三者未对齐;需配置"terminal.integrated.env.windows": {"pythonioencoding": "utf8"}、"terminal.integrated.profiles.windows"中powershell启动时执行chcp 65001,并手动设置终端字体为consolas或cascadia code,改后须重启vscode。

终端里 print("中文") 显示 □ 或 ?,但 echo 你好 正常
说明终端本身能渲染中文,问题出在 Python 启动时没把 stdout 设成 UTF-8。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 也乱码
这是 PowerShell/CMD 进程启动时根本没走 UTF-8 路径,不是 Python 的事。VSCode 默认只是调起 powershell.exe,没主动切代码页。
- 临时验证:终端里输
chcp 65001,回车,立刻生效 - 永久解决:在
settings.json加 profile 配置,确保每次启动都执行:"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] } } -
-NoExit必须有,否则终端启动完就退出 - 改完必须重启 VSCode,只重启终端不够——旧 shell 进程环境已固化
终端字体显示方块,哪怕 chcp 和 PYTHONIOENCODING 都对了
字体链没兜住中文,和编码无关。Consolas、Fira Code 等主流等宽字体默认不含 CJK 字形,渲染时 fallback 失败就出方块。
- Windows 用户:右键终端 → 属性 → 字体 → 手动选
Consolas或Cascadia Code(别用SimSun,它不是等宽字体) - VSCode 设置里填
terminal.integrated.fontFamily,例如:"Cascadia Code", "Microsoft YaHei"(英文名,逗号分隔) - 改完必须新开终端,旧终端不刷新字体渲染引擎
- 用
echo "测试中文"验证,不是靠print()—— 它绕过 Python 编码逻辑,直击字体层
Debug Console / Output 面板里中文仍是问号
Debug Console 不走终端流程,也不继承 terminal.* 配置,它依赖 Node.js 层的编码感知,而 Windows 上默认不启用 UTF-8 模式。
- 在项目根目录的
.vscode/launch.json里,给当前 launch 配置加"env"字段:"env": { "PYTHONIOENCODING": "utf8" } - 注意值必须小写
utf8,UTF-8在 Windows 下不生效 - 如果用了老版调试器(如 ptvsd),确认启动参数含
--log-to-stderr,乱码常伴随编码警告日志一起出现 - 禁用非必要插件(尤其 Terminal、Code Runner 类),干净环境复现,排除干扰











