Windows下Python中文乱码根本原因是终端默认编码非UTF-8,需统一源文件、stdout及终端三层编码:设PowerShell为默认终端、执行chcp 65001、显式声明utf-8编码。

Windows 下 Python 控制台输出中文变问号或方块
根本原因是 VS Code 终端默认编码不是 UTF-8,而 Windows 系统 cmd/powershell 的默认代码页通常是 GBK(如 936),但 Python 脚本按 UTF-8 编码写字符串时,终端用 GBK 解码就乱了。
实操建议:
- 在 VS Code 设置里搜
terminal.integrated.defaultProfile.windows,把它设为powershell(别用cmd,cmd 对 Unicode 支持更弱) - 打开 VS Code 内置终端后,先手动执行:
chcp 65001(切换当前会话为 UTF-8) - 如果每次都要敲命令,就在 PowerShell 配置文件
$PROFILE里加一行:chcp 65001 > $null - 确保 Python 文件开头有
# -*- coding: utf-8 -*-(虽然 Python 3 默认是 UTF-8,但显式声明能避免某些编辑器误判)
VS Code 终端显示正常但调试控制台(Debug Console)仍乱码
调试控制台不走系统终端逻辑,而是由 VS Code 的 Debug Adapter 直接处理输出,它可能忽略文件编码或环境变量。
实操建议:
- 检查
launch.json中是否设置了"console": "integratedTerminal"—— 这会让调试输出重定向到下方终端,避开 Debug Console 的解析问题 - 如果必须用
debug console,在 Python 代码里强制指定输出编码:import sys; sys.stdout.reconfigure(encoding='utf-8')(仅 Python 3.7+) - 不要依赖
os.environ['PYTHONIOENCODING'] = 'utf-8',调试器不一定读这个环境变量
Python 打印日志到文件却出现乱码,和 VS Code 有关吗?
无关。这是文件写入层的问题,但容易被误认为是 VS Code 导致的 —— 因为你在 VS Code 里打开该文件时看到乱码。
实操建议:
- 用
open(..., encoding='utf-8')显式指定编码,别用默认参数(尤其在 Windows 上,默认可能是mbcs) - 日志库如
logging,需在FileHandler中传encoding='utf-8'参数 - VS Code 自己打开文件时,右下角会显示当前编码(如
UTF-8或GBK),点它可手动重新以正确编码解析 —— 这只是编辑器行为,不修复写入问题
Mac / Linux 用户为什么很少遇到这问题?
因为系统终端默认就是 UTF-8,locale 输出通常含 UTF-8,Python 和 shell 天然对齐。但仍有例外:
- 如果在 VS Code 里改过
terminal.integrated.env.linux或env.osx,清掉自定义的LANG或LC_ALL - 某些 Docker 容器内运行 Python,
locale未配置,输出也会乱 —— 这时要进容器跑locale -a | grep utf8,再export LANG=C.UTF-8 - VS Code Remote-SSH 连过去时,本地设置不自动同步,得在远程机器的
~/.bashrc或~/.zshrc里补上export LANG=C.UTF-8
最常被忽略的一点:乱码问题往往横跨三层——Python 源文件编码、运行时 stdout 编码、终端/编辑器解码方式。只改其中一层,看起来像修好了,其实换个场景又崩。盯住 chcp、sys.stdout.encoding、VS Code 右下角编码标识这三个地方,基本就能定位到断点在哪。


















