Sublime Text 控制台中文乱码的根本原因是Python输出编码(如GBK)与Sublime UTF-8解析不匹配;解决方法是在.sublime-build中通过env设置"PYTHONIOENCODING": "utf-8"和"PYTHONUTF8": "1",并禁用chcp命令,确保端到端UTF-8对齐。

Sublime Text 控制台(Build System 输出)显示中文乱码,根本原因是 Python 编译器启动时默认使用系统 locale 编码(如 Windows 的 gbk),而 Sublime 的控制台输出缓冲区按 utf-8 解析,两者不匹配。直接改 Python 源文件编码或加 # -*- coding: utf-8 -*- 无效——那是源码读取编码,不是终端输出编码。
Python 构建系统强制指定 env 编码为 UTF-8
Sublime 的构建系统(.sublime-build)支持通过 env 注入环境变量,让 Python 进程主动使用 UTF-8 处理标准输出。这是最稳定、跨平台的解法。
- 菜单栏 → Tools → Build System → New Build System…
- 替换全部内容为以下配置(Windows / macOS / Linux 通用):
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^\\s*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"encoding": "utf-8",
"env": {
"PYTHONIOENCODING": "utf-8",
"PYTHONUTF8": "1"
}
}-u 参数强制 Python 使用无缓冲输出,避免换行丢失;PYTHONIOENCODING 告诉 Python 标准流用 UTF-8 编码;PYTHONUTF8=1(Python 3.7+)启用 UTF-8 模式,覆盖系统 locale 影响。
Windows 下必须禁用 chcp 65001 自动切换
即使设置了 PYTHONIOENCODING,Windows 的 cmd/powershell 默认仍可能在 Sublime 启动 Python 时执行 chcp 65001(切换到 UTF-8 代码页),但 Sublime 控制台对代码页切换响应不一致,反而引发乱码或崩溃。
立即学习“Python免费学习笔记(深入)”;
- 打开
Preferences → Package Settings → Sublime Text → Settings – User - 添加或修改:
"show_panel_on_build": false(可选,减少干扰) - 关键:确保你的构建系统里 没有 在
cmd中调用chcp或cmd /c包裹命令 - 错误写法示例(会导致二次编码混乱):
"cmd": ["cmd", "/c", "chcp 65001 >nul && python -u $file"]
验证是否生效:用最小脚本测试输出编码
别依赖 print("中文") 是否显示正常——有些终端会“凑巧”渲染对,但实际字节已损坏。应检查原始字节流是否为合法 UTF-8。
- 新建
test_encoding.py,内容为:
import sys
print("中文")
print(f"stdout.encoding: {sys.stdout.encoding}")
print(f"locale.getpreferredencoding(): {sys._stdlib_locale.getpreferredencoding() if hasattr(sys, '_stdlib_locale') else 'N/A'}")运行后,正确输出应为:stdout.encoding: utf-8,且中文不乱码。若仍是 cp936 或 mbcs,说明 env 未生效或被覆盖。
插件或第三方构建系统(如 Anaconda)需单独配置
如果你用了 Anaconda、SublimeCodeIntel 或自定义的 Python3.sublime-build,它们会绕过默认构建系统。必须手动编辑对应文件:
- 查找路径:
Sublime Text 3\Packages\Anaconda\Anaconda-python.sublime-build(Windows)或通过Preferences → Browse Packages进入 - 在
env字段中同样加入"PYTHONIOENCODING": "utf-8"和"PYTHONUTF8": "1" - 保存后重启 Sublime,否则更改不加载
很多人卡在最后一步:改了构建系统却没重启 Sublime,或者改错了文件(比如改了 User 目录下的同名文件,但实际生效的是插件自带的)。控制台乱码本质是进程级编码协商失败,任何中间环节(shell、Python、Sublime)掉链子都会回退到系统默认,所以必须端到端对齐 UTF-8。










