Sublime Text Python构建乱码需在.sublime-build中显式设置"encoding": "utf-8"、使用"cmd"模式指定Python绝对路径并加-u参数,且修改后须手动切换构建系统生效。

Sublime Text 的编译系统默认用系统 locale 启动子进程,Windows 上常是 GBK,而 Python 脚本若用 UTF-8 保存且含中文 print,控制台就大概率显示乱码——这不是 Sublime 自身编码设置问题,而是子进程的 stdin/stdout 编码没对齐。
Python 编译系统没指定 encoding 导致 decode 失败
Sublime 的 sublime-build 文件若没显式声明 encoding 字段,它会依赖系统环境变量(如 Windows 的 chcp 输出)来猜测输出编码。但 Python 3 默认用 UTF-8 输出,和 GBK 环境一碰就崩。
- 打开当前构建系统文件(
Tools → Build System → New Build System...),存为Python3.sublime-build - 确保内容包含
"encoding": "utf-8",且"cmd"中调用的是真实 Python 可执行路径(避免靠环境变量间接调用) - 示例关键字段:
{ "cmd": ["D:/Python39/python.exe", "-u", "$file"], "file_regex": "^\s*File "(...*?)", line ([0-9]*)", "encoding": "utf-8", "selector": "source.python" } -
-u参数必须加:禁用 stdout/stderr 缓冲,避免中文卡住不输出
Windows 下 cmd 默认编码是 GBK,但 Python 子进程不受 Sublime 控制台影响
有人试过改 chcp 65001,但这只影响手动打开的 cmd 窗口,Sublime 启动的子进程不继承这个设置。真正起作用的是构建系统里的 encoding 和 Python 进程自身的 I/O 配置。
- 不要在构建系统里写
"shell_cmd": "python -u $file"—— shell 模式下 Sublime 不解析encoding,会退回到系统 locale - 务必用
"cmd"模式 + 显式可执行路径 +"encoding": "utf-8" - 如果仍乱码,检查 Python 脚本第一行是否有
# -*- coding: utf-8 -*-(虽然 Python 3 默认 UTF-8,但显式声明更稳)
第三方插件(如 Terminus)输出正常,但原生 Build System 还是乱码
Terminus 是独立终端模拟器,它自己管理编码协商;而 Sublime 原生构建系统走的是轻量 subprocess 调用,不启动完整终端,所以无法自动适配 chcp 或 set PYTHONIOENCODING=utf-8。
- 别指望靠
env字段塞PYTHONIOENCODING:Windows 下该环境变量对 subprocess 无效(Python 官方已确认) - Mac/Linux 用户一般无此问题,因为其默认 locale 多为 UTF-8,但若终端 locale 是
en_US.ISO-8859-1,同样要加"encoding": "utf-8" - 如果项目必须兼容多语言路径(比如脚本名含中文),还需加
"path": "C:\Python39"显式指定路径,避免 Sublime 在 PATH 中找到旧版本或编码异常的 python.exe
最易被忽略的一点:改完 .sublime-build 文件后,必须手动切换一次构建系统(Tools → Build System),否则 Sublime 会继续缓存旧配置。临时改了文件却没切系统,是调试时最常白忙活的原因。











