VSCode运行结果中文乱码主因是终端与Python编码未对齐:Windows终端默认chcp 936(GBK),而Python按UTF-8输出,导致解码错位;需同步配置终端启动自动切为65001、tasks.json注入PYTHONIOENCODING=utf-8,并确保文件保存编码与读取逻辑一致。

VSCode 运行结果中文显示错误,绝大多数情况不是代码写错了,而是终端(Terminal)和 Python 运行环境的编码没对齐。UTF-8 和 GBK 互读就会出“涓枃”“閲嶅惎”这类典型乱码,必须分清「文件编码」「终端代码页」「Python I/O 编码」三者,不能只改一个地方。
终端启动时没切到 UTF-8 代码页
Windows 下 VSCode 集成终端(PowerShell / CMD)默认用的是 chcp 936(GBK),而 Python 脚本按 utf8 输出,终端却用 GBK 解码,必然错位。
- 临时解决:在终端里手动执行
chcp 65001,再运行脚本 —— 但每次新开终端都要重输,不实用 - 永久生效:修改
settings.json,强制终端启动时自动切编码:{ "terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "args": ["-NoExit", "-Command", "chcp 65001 > $null"] }, "Command Prompt": { "path": "cmd.exe", "args": ["/K", "chcp 65001"] } }, "terminal.integrated.defaultProfile.windows": "PowerShell" } - 注意:
PowerShell的-Command写法比/c更可靠,避免窗口闪退;> $null是为了隐藏Active code page: 65001提示行
Python 运行时没声明 I/O 编码
即使终端是 UTF-8,Python 本身也可能因环境变量缺失,把 sys.stdout 当作 ANSI 编码处理,尤其在 Windows 上常见。
- 推荐做法:在
tasks.json中为 Python 任务注入环境变量"options": { "env": { "PYTHONIOENCODING": "utf-8" } } - 不建议在每个 Python 文件里加
sys.stdout=io.TextIOWrapper(...)—— 容易漏、污染逻辑、且在调试器中可能失效 - 系统级补救(可选):添加 Windows 系统环境变量
PYTHONIOENCODING=utf-8,重启 VSCode 生效
INI 或旧配置文件被误存为 UTF-8
老软件生成的 .ini 文件几乎全是 GBK 编码。如果直接用 VSCode 按 UTF-8 打开 → 点右下角「通过编码保存」→ 选 UTF-8 → 保存,会把原本的 GBK 字节强行 reinterpret 为 UTF-8,再写回,文件就真损坏了。
- 安全流程:右下角点击当前编码(如
GBK)→「通过编码重新打开」→ 选GBK→ 确认显示正常 → 「通过编码另存为」→ 选UTF-8→ 保存为新文件名(如config_utf8.ini) - 不要覆盖原文件,尤其当它是游戏存档、路由器导出配置、汉化补丁时
- 后续所有读取该文件的代码(比如
configparser)必须显式指定encoding='gbk',否则仍会报错或乱码
最常被忽略的一点:乱码问题从来不是单点故障。改了 files.encoding 却不调终端,或者设了 chcp 65001 却没配 PYTHONIOENCODING,都只能解决一半。真正稳定的方案,是让「文件保存编码」「终端解码方式」「Python 运行时 I/O 编码」三者严格一致,且优先走 UTF-8 路线。











