pycharm中文乱码需分层处理:控制台乱码应配置终端编码与环境变量;编辑器文件乱码需按右下角编码重载并转存utf-8;ui路径乱码需更换支持中文的字体;matplotlib图表乱码需修改matplotlibrc及清理字体缓存。

PyCharm 中文乱码不是单一设置能“一键修复”的问题,它本质是多层编码不一致叠加的结果:文件保存用一种编码,控制台输出用另一种,JVM读取时又默认第三种,字体渲染再缺一环——漏掉任何一层,中文就可能变 或 æ–‡。
真正起效的解法,得按实际现象分层处理,而不是统一设成 UTF-8 或 GBK 就完事。
控制台 print() 输出中文是方块或问号
这是最常见也最容易误判的场景。根本原因是Python Console 或 Run Configuration 启动的终端环境(Windows cmd/powershell 或 Linux bash)和 PyCharm 内部解释器之间编码错位。
- Windows 下 cmd 默认代码页是
936(即GBK),而 PyCharm 的 Python Console 默认用UTF-8解码输出,必然乱码 - 直接改
Project Encoding为GBK只治标不治本,还会导致 Git 提交、协作时出问题
正确做法:
在 File → Settings → Tools → Python Console 中,勾选 Use IPython if available(IPython 对编码更鲁棒)
在 File → Settings → Tools → Terminal 中,把 Shell path 改为 cmd.exe /k chcp 65001 >nul(强制启动时切 UTF-8 模式)
对单个 Run 配置,在 Run → Edit Configurations → Environment variables 里加:PYTHONIOENCODING=utf-8
避免使用 -u 参数——它只影响 stdout/stderr 缓冲,不解决底层编码协商问题
编辑器里代码本身显示为乱码
这种情况通常发生在打开旧项目、从别人那里拷贝的 .py 文件,或者新建文件但未声明编码。- 不要盲目把
Global Encoding和Project Encoding都设成GBK,尤其当团队用 Git 协作时,会引发 diff 异常、提交失败 - 关键看单个文件右下角状态栏显示的当前编码(如
UTF-8、GBK、ISO-8859-1),点它可重新以指定编码重载
实操建议:
新建 Python 文件时,第一行必须写:# -*- coding: utf-8 -*-(Python 3 可省略,但显式声明更稳妥)
已有乱码文件:右下角点击编码名 → Reload project encoding as... → 选疑似原始编码(比如旧 Windows 记事本存的选 GBK)→ 确认后立刻另存为 UTF-8
批量修复:用 File → File Encoding → Convert Encoding to UTF-8,但务必先备份——转换不可逆
PyCharm 2026.2是 JetBrains PyCharm 的指定版本安装包,下载地址指向官方 Windows 安装包直链,可用于旧项目兼容、版本回退和环境测试。
左侧 Project 树或菜单里中文路径/文件名显示为小方块
这跟文本内容编码完全无关,纯属字体渲染问题。PyCharm 默认字体(如JetBrains Mono)不包含中文字符集。
- 即使所有编码全设成
UTF-8,这里照样显示方块 - 不需要改任何编码配置,只需换字体
操作路径:
File → Settings → Appearance → Fonts
取消勾选 Use custom font(如果已启用),或勾选后在 Font 下拉框里选一个带中文支持的字体,例如:Microsoft YaHei、Noto Sans CJK SC、SimSun
注意:Linux/macOS 用户需确认系统已安装对应中文字体,否则下拉列表里不会出现
Matplotlib 图表中文标题/标签全是方块
这是独立于 PyCharm 编码设置的另一套体系,由 Matplotlib 自己的字体缓存和 rcParams 控制。- 改 PyCharm 的
File Encodings对图表毫无影响 - 即使代码里写了
plt.rcParams['font.sans-serif'] = ['SimHei'],若系统没装该字体或 Matplotlib 找不到,依然乱码
关键步骤:
先运行 import matplotlib; print(matplotlib.matplotlib_fname()) 查看配置文件路径
编辑该 matplotlibrc 文件,取消注释并修改:font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, sans-serif
删掉用户级字体缓存目录(Windows:%USERPROFILE%\.matplotlib\fontlist-*.json;macOS/Linux:~/.matplotlib/fontlist-*.json),让 Matplotlib 重启扫描字体
代码中必须加:plt.rcParams['axes.unicode_minus'] = False,否则负号会显示为方块
真正麻烦的不是某一步怎么做,而是你得先判断:乱码出现在哪一层?是终端输出、编辑器文本、UI 界面,还是第三方库渲染?每层背后机制不同,混着调只会让问题更隐蔽。










