根本原因是windows终端默认gbk编码与utf-8输出不匹配;需通过chcp 65001切换代码页、配置powershell启动脚本、设置pythonioencoding=utf-8,并重启终端生效。

为什么VSCode终端输出中文是乱码
根本原因是Windows系统默认终端(cmd/powershell)使用GBK编码,而你的代码或脚本按UTF-8输出,两者不匹配。VSCode只是复用了系统终端的编码设置,并没强制统一。
修改VSCode终端默认编码为UTF-8(Windows)
关键不是改VSCode设置,而是让终端本身以UTF-8启动。直接改settings.json里的terminal.integrated.defaultProfile.windows或terminal.integrated.profiles.windows没用—— profile只管启动哪个shell,不管编码。
- 对PowerShell:在终端里运行
chcp 65001可临时切到UTF-8,但每次新开终端都要重输 - 一劳永逸的做法:在PowerShell配置文件(
$PROFILE)末尾加一行chcp 65001 > $null - 对cmd:同样加
chcp 65001到%USERPROFILE%\cmd.bat(需在profile中配置启动该bat) - VSCode设置里启用
terminal.integrated.env.windows并加入{"PYTHONIOENCODING": "utf-8"},对Python脚本输出特别有效
Python脚本在终端里仍乱码?检查print和sys.stdout
即使终端是UTF-8,Python 3.8+在非UTF-8环境可能自动降级sys.stdout.encoding为cp936(即GBK),导致print("中文")实际按GBK编码输出,被UTF-8终端当成乱码解析。
- 运行
python -c "import sys; print(sys.stdout.encoding)"确认当前编码 - 临时修复:启动时加
python -X utf8 your_script.py - 永久生效:设环境变量
PYTHONIOENCODING=utf-8(注意不是PYTHONIOENCODE,少个d就无效) - 避免用
open(..., encoding="gbk")读写文件后直接print——确保全流程用UTF-8
Git Bash / WSL终端乱码怎么办
Git Bash默认UTF-8,但中文路径或命令可能触发GBK回退;WSL则通常没问题,除非Windows端locale非中文。
- Git Bash:右键标题栏 → Options → Text → Locale设为
zh_CN,Charset设为UTF-8 - WSL:检查
/etc/wsl.conf是否有[boot] systemd=true,并确认locale -a | grep utf8含zh_CN.utf8 - VSCode Remote-WSL连接后,终端编码由WSL决定,不用动VSCode设置
真正麻烦的是混合场景:比如用Windows版VSCode连WSL,又在本地终端跑Python,又调用cmd命令——每个环节的编码都得单独验,不能只改一处。











