VSCode终端中文乱码本质是终端代码页、程序输出编码、字体渲染三者未对齐;需通过chcp验证实际代码页,配置PowerShell profile自动执行chcp 65001,设置PYTHONIOENCODING=utf8,并选用支持中文的等宽字体。

VSCode终端输出中文乱码不是“坏了需要重置”,而是三处编码没对齐:终端启动时的代码页、程序进程的输出编码、字体渲染链路。直接删设置或重装 VSCode 不解决问题,必须分层干预。
确认当前终端实际代码页是哪一种
乱码前先验证问题在哪一层。在 VSCode 集成终端里执行:chcp(Windows)或 locale(Linux/macOS)。
如果输出是 活动代码页: 936,说明终端正用 GBK 解码;如果是 65001,说明已切 UTF-8,但程序可能没跟上。
别信状态栏或设置里写的“UTF-8”——只有 chcp 或 locale 的实时输出才算数。
PowerShell 终端必须重配 profile 启动参数
VSCode 每次新建终端都会重新加载 PowerShell 启动配置,旧终端不会自动更新。只改 terminal.integrated.env.windows 不生效,必须进 settings.json 改 profile:
- 确保
terminal.integrated.defaultProfile.windows设为"PowerShell" - 在
terminal.integrated.profiles.windows里为"PowerShell"显式定义args,例如:"PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] } - 改完后按
Ctrl + Shift + `关掉所有终端标签页,再手动新建一个——旧终端缓存的是旧代码页,关不掉就白配
Python 输出仍乱码?检查 PYTHONIOENCODING 是否设对
即使终端已是 UTF-8,Python 进程仍可能沿用系统默认编码(如 cp936),因为 PYTHONIOENCODING 环境变量没传进去:
- 在
settings.json中加:"terminal.integrated.env.windows": { "PYTHONIOENCODING": "utf8" }(注意值是utf8,不是UTF-8或utf-8) - 验证是否生效:终端里运行
python -c "import sys; print(sys.stdout.encoding)",输出必须是utf-8 - 若仍为
cp936,说明环境变量没注入成功——检查是否拼错 key 名,或被其他扩展覆盖
别碰 terminal.integrated.encoding —— 它已弃用
很多教程还在教设 terminal.integrated.encoding,但 VSCode 自 1.80 起已移除该配置项。设了等于没设,还会干扰你判断真实问题。真正起作用的是:chcp 命令(控制终端解码)、PYTHONIOENCODING(控制 Python 进程输出编码)、fontFamily(控制字形渲染)。这三项缺一不可,少一个都可能看到 或方块。
最容易被忽略的是:PowerShell 的 $PROFILE 文件里如果已有 chcp 65001,会和 VSCode 的 profile 配置冲突,导致终端启动两次 chcp,有时反而失败。动手前先查 notepad $PROFILE 里有没有重复指令。


















