Sublime Text 构建日志乱码的根本原因是子进程 UTF-8 输出被按系统编码(如 GBK)错误解码,须在 .sublime-build 文件中用 cmd 数组模式、绝对 Python 路径、-u 参数及顶层 "encoding": "utf-8" 四者缺一不可。

Sublime Text 汉化后日志输出(Build Results 窗口)仍显示乱码,和菜单/界面汉化无关,问题出在构建系统对子进程 stdout 字节流的解码逻辑上——它默认用系统 locale(Windows 是 GBK)去 decode Python 输出的 UTF-8 字节,结果就是“涓枃”或空格块。
为什么改字体、切编码、装汉化包都没用
日志输出乱码不是渲染问题,而是 Sublime 启动的 Python 子进程输出 UTF-8 字节后,编辑器没指定解码方式,就按当前系统编码硬解。Windows 下 chcp 65001 不继承给 Sublime 的子进程,PYTHONIOENCODING=utf-8 在 Windows 上被 Python 官方明确标注为无效,shell_cmd 写法也完全忽略 "encoding" 字段。
- 右下角状态栏切换编码 → 只影响文件显示,不影响 Build Results
- Preferences → Settings 里改
font_face或default_encoding→ 对控制台输出零作用 - ConvertToUTF8 插件 → 只处理文件读写,不干预构建过程的 I/O 编码协商
必须修改 .sublime-build 文件的三个硬性条件
新建或编辑 Tools → Build System → New Build System,保存为 Python3.sublime-build(文件名任意,但后续要手动选中),内容需同时满足:
- 用
"cmd"数组模式,不能用"shell_cmd":只有数组模式才尊重顶层"encoding" -
"cmd"中 Python 路径必须是绝对路径,例如"D:/Python39/python.exe",避免环境变量歧义 - 显式加
"-u"参数:禁用 stdout 缓冲,否则中文可能卡住不输出 - 顶层同级写
"encoding": "utf-8"(注意不是塞进"cmd"里)
{
"cmd": ["D:/Python39/python.exe", "-u", "$file"],
"file_regex": "^.*?File \"(.*?)\", line ([0-9]*)",
"encoding": "utf-8",
"selector": "source.python"
}改完不生效?最常漏掉的两步
配置保存后不会自动切换构建系统,必须手动触发一次激活:
- 执行
Tools → Build System → Python3(名称要和你保存的文件名一致) - 确认右下角状态栏显示的构建系统名称已变成你刚命名的那个,比如
Python3
如果脚本开头有 # -*- coding: utf-8 -*-,保留它;确保文件本身是 UTF-8 无 BOM 格式(Notepad++ 可验证)。
真正麻烦的地方不在写 JSON,而在于每台 Windows 机器、每个 Python 版本都要单独配绝对路径;且一旦换 Python 环境,这个 .sublime-build 就立刻失效——它不查环境变量,只认死路径。


















