<p>PyCharm运行乱码主因是编码链路未对齐,需按乱码位置分三类处理:1. Run Console乱码优先加启动参数-u或环境变量PYTHONIOENCODING=UTF-8;2. Python Console乱码需在设置中添加chcp 65001启动脚本;3. 编辑区乱码应右下角重载编码后转存为UTF-8并添加# coding=utf-8声明。</p>

PyCharm运行程序出现乱码,绝大多数情况不是代码写错了,而是编码链路中某一个环节没对齐——比如文件保存用的是UTF-8,但控制台默认按GBK读,或者Python解释器启动时没被告知该用什么编码输出。调编码不是“统一设成UTF-8”就完事,得看乱码出现在哪、谁在读、谁在写。
乱码出现在运行结果区(Run Console)
这是最常见场景:print("你好") 输出一堆问号或方块。根本原因是 Windows cmd/powershell 默认使用 GBK(代码页 936),而 PyCharm 的 Run Console 默认走 UTF-8,两者不匹配。
- 优先尝试在 Run 配置里加启动参数:
-u(强制 Python 使用 unbuffered 模式,同时让 stdout/stderr 默认用 UTF-8 编码) - 如果仍不行,在
Run/Debug Configurations → Environment variables中添加:PYTHONIOENCODING=UTF-8 - 不要只改
Project Encoding,那管的是源文件读取,不是输出;Global Encoding设为 UTF-8 是好习惯,但对运行时输出无效 - Windows 用户慎用“把 Project Encoding 改成 GBK”这种方案——它可能让含 emoji 或生僻字的字符串报
UnicodeEncodeError
乱码出现在 Python Console(交互式终端)
输入 print("测试") 直接变乱码,说明 Python Console 自身没切到 UTF-8 模式,尤其在 Windows 上。
PyCharm 2026.2是 JetBrains PyCharm 的指定版本安装包,下载地址指向官方 Windows 安装包直链,可用于旧项目兼容、版本回退和环境测试。
- 进
File → Settings → Tools → Python Console - 勾选
Use IPython if available(可选,但 IPython 对编码更友好) - 在
Starting script区域加一行:import os; os.system('chcp 65001 >nul')(强制切换当前 cmd 会话为 UTF-8) - 或者直接在 Console 里手动执行
!chcp 65001,再运行代码——但每次重启 Console 都要重输,所以推荐写进启动脚本
代码文件打开就是乱码(编辑区文字糊成一团)
不是运行时问题,是 PyCharm 没猜对文件实际编码。常见于从别人那里拷来的脚本,或旧项目迁移。
- 右下角状态栏会显示当前文件编码(如
UTF-8、GBK),点击它 →Reload project encoding as...→ 选疑似正确编码(比如显示乱码但你知道原文是中文,试试GBK) - 确认后,再点右下角 →
Convert to UTF-8(把内容转存为 UTF-8,避免后续隐患) - 务必在文件首行加声明:
# coding=utf-8或# -*- coding: utf-8 -*-(注意位置:必须是前两行之一) - 别依赖 IDE 自动识别——特别是混合了中文注释和英文变量名的老脚本,PyCharm 容易误判为 Latin-1
Terminal(内置终端)里命令输出乱码
比如执行 git log 或 pip list 出现中文乱码,这跟 Python 无关,是终端字体或 shell 编码问题。
- 进
Settings → Editor → Color Scheme → Console Font,字体选支持中文的(如Microsoft YaHei、Noto Sans CJK SC),大小调到 12–14 - Linux/macOS 用户检查 shell 的
locale:终端里运行locale,确保LANG和LC_ALL含UTF-8;若没有,在~/.zshrc或~/.bashrc加export LANG=en_US.UTF-8 - Windows 用户注意:PowerShell 默认支持 UTF-8,但旧版 cmd 不稳定;PyCharm 默认开的是 cmd,可在
Settings → Tools → Terminal → Shell path改成powershell.exe -ExecutionPolicy RemoteSigned
真正麻烦的不是调哪个选项,而是得先分清:乱码是文件读错了、解释器输出错了、还是终端渲染错了。三个环节各自独立,改错地方只会让问题更隐蔽。尤其要注意 Windows 下 cmd 和 PowerShell 的编码行为差异,以及 PYTHONIOENCODING 环境变量只影响子进程、不影响已启动的 Console 这种细节。

















