Python命令行输出乱码主因是终端、源文件与系统编码不统一,尤其Windows cmd默认GBK与Python UTF-8冲突;应统一设为UTF-8,包括执行chcp 65001、源文件存为UTF-8并声明coding、读写文件指定encoding、启用系统级UTF-8支持。

Python 命令行输出乱码,通常是因为终端编码、Python 源文件编码、或 Windows 控制台默认编码(如 GBK)与代码中使用的 Unicode 字符(比如中文字符串)不匹配导致的。重点在统一编码环境,尤其注意 Windows 系统下 cmd/powershell 的限制。
检查并设置终端编码为 UTF-8
Windows 默认终端(cmd)用的是 GBK,而 Python 3 默认按 UTF-8 解析源码,二者冲突就会显示乱码。
- 临时解决:在运行 Python 脚本前,执行 chcp 65001(切换当前 cmd 编码为 UTF-8)
- PowerShell 用户可运行:[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
- 更彻底的办法是改用支持 UTF-8 更好的终端,比如 Windows Terminal + Python 官方安装包自带的 IDLE 或 VS Code 集成终端
确保 Python 源文件保存为 UTF-8 编码
即使终端支持 UTF-8,如果 .py 文件本身是 GBK 编码保存的,Python 解释器读取时也会出错。
- 用 VS Code、Notepad++ 或 PyCharm 打开文件,确认右下角显示“UTF-8”(不是 GBK/ANSI)
- 在文件开头显式声明编码(虽然 Python 3 默认是 UTF-8,但加一行更稳妥):
# -*- coding: utf-8 -*-
避免 print 中文被错误转义或截断
某些情况下,print 输出看似乱码,其实是字符串内部编码异常或被意外 encode/decode。
立即学习“Python免费学习笔记(深入)”;
- 不要手动对字符串做 .encode('gbk').decode('utf-8') 这类混搭操作
- 如果从文件读中文,打开时指定 encoding:open('a.txt', encoding='utf-8')
- Windows 下用 subprocess 调用外部命令时,stdout 默认可能是 bytes,需用 text=True, encoding='utf-8' 参数
(Windows 专属)启用系统级 UTF-8 支持
Win10/11 可开启“Beta 版 UTF-8 支持”,让系统 API 默认使用 UTF-8,一劳永逸。
- 设置 → 时间和语言 → 语言 → 管理语言设置 → 更改系统区域设置 → 勾选“Beta 版:使用 Unicode UTF-8 提供全球语言支持”
- 重启电脑生效(注意:个别旧软件可能兼容性受影响)











