sublime text控制台中文乱码的根本原因是构建系统未正确配置编码协商,必须在.sublime-build文件中使用"cmd"数组模式、指定python绝对路径、添加"-u"参数,并同级设置"encoding":"utf-8",且修改后需手动切换构建系统生效。

Sublime Text 控制台输出中文乱码,和你打开的文件编码无关,只取决于构建系统(.sublime-build)是否正确配置了 "encoding": "utf-8" 和 Python 子进程的 I/O 设置。改字体、装 ConvertToUTF8、右下角切 UTF-8 都不影响 Build Results 窗口——那些只管文件显示,不管 print() 输出。
为什么改编辑器设置没用?
因为控制台(Build Results)内容来自 Python 进程的 stdout 字节流,Sublime 默认不指定解码方式,Windows 下就按 GBK 去 decode UTF-8 字节,结果就是“涓枃”或空格块。这不是 Sublime 自身渲染问题,而是子进程通信链路的编码错配。
-
shell_cmd写法(如"shell_cmd": "python -u $file")完全忽略"encoding"字段 - 环境变量
PYTHONIOENCODING=utf-8在 Windows 上对 Sublime 启动的 subprocess 无效(Python 官方明确标注) -
chcp 65001只影响手动打开的 cmd,不继承给 Sublime 的子进程
必须修改 .sublime-build 文件
新建或编辑构建系统(Tools → Build System → New Build System),保存为 Python3.sublime-build,内容必须包含以下三点:
- 用
"cmd"数组模式,不能用"shell_cmd" -
"cmd"中调用 Python 绝对路径(如"D:/Python39/python.exe"),避免环境变量歧义 - 显式加上
"-u"参数:禁用 stdout 缓冲,否则中文可能卡住不输出 - 顶层加
"encoding": "utf-8"字段(注意:不是放在"cmd"里,是同级键)
示例(Windows):
{
"cmd": ["D:/Python39/python.exe", "-u", "$file"],
"file_regex": "^.*?File \"(.*?)\", line ([0-9]*)",
"encoding": "utf-8",
"selector": "source.python"
}
改完后必须手动切换构建系统
这是最容易被跳过的一步:保存 .sublime-build 文件后,不会自动生效。必须手动执行一次 Tools → Build System → Python3(或你命名的名称),否则仍走旧配置。
- 确认当前选中的构建系统右下角显示名称匹配你刚保存的文件名
- 如果脚本开头有
# -*- coding: utf-8 -*-,保留它——虽对 Python 3 非必需,但能防止某些旧构建系统误判源码编码 - 确保脚本文件本身是 UTF-8 无 BOM 格式保存(可用 Notepad++ 的“编码 → 转为 UTF-8 无签名”验证)
真正麻烦的地方不在写配置,而在于:每个 Python 版本、每台 Windows 机器都要单独配绝对路径;且每次改完 build 文件,都得手动点一次菜单切换——这个动作没有快捷键,也无自动提示,一疏忽就白调了。











