sublime 运行 python 脚本中文乱码的根源是构建系统未正确配置编码处理,必须使用 "cmd" 数组写法(如["d:/python39/python.exe", "-u", "$file"])、添加 "-u" 参数禁用缓冲、并设置小写连字符的 "encoding": "utf-8"。

Sublime 运行 Python 脚本时控制台输出中文变问号或方块,不是文件编码错了,而是构建系统没告诉 Sublime:子进程的 stdout 是 UTF-8 字节流,你得用 UTF-8 去解。
为什么 shell_cmd 加 -u 还是乱码
因为 "shell_cmd": "python -u $file" 写法下,"encoding": "utf-8" 完全不生效——Sublime 只在 "cmd" 模式下读取 encoding 字段。Windows 上用 shell_cmd 实际调的是 cmd.exe /c,中间多了一层 shell,encoding 配置被忽略。
- 必须改用
"cmd"数组写法,例如:["D:/Python39/python.exe", "-u", "$file"] - Python 路径必须写绝对路径,不能写
python——环境变量由系统决定,Sublime 不继承你的终端 PATH -
-u参数不可省:禁用缓冲,否则中文可能卡住不输出(尤其带input()时) -
"encoding": "utf-8"必须小写连字符,写成"UTF-8"或"utf8"都无效
Windows 用户别碰 chcp 65001 和 PYTHONIOENCODING
这两个在 Sublime 构建系统里基本没用。官方明确说明:subprocess.Popen 在 Windows 上不读取 PYTHONIOENCODING 环境变量;chcp 65001 只影响手动打开的 cmd 窗口,Sublime 启动的子进程不继承该设置。
-
"env": {"PYTHONIOENCODING": "utf-8"}是无效配置,删掉 -
"shell": true+chcp组合也无效,别试 - 真正起作用的只有三样:
"cmd"数组、-u、"encoding": "utf-8"
Mac/Linux 用户也要配 "encoding": "utf-8"
别以为 Unix 系统就安全。一旦终端 locale 是 en_US.ISO-8859-1 或其他非 UTF-8 设置,Sublime 内置控制台照样乱码——它不读终端 locale,只认构建系统里的 encoding 字段。
- 跨平台协作时,硬写
"encoding": "utf-8"是最稳做法 - 验证是否生效:写个
test.py,内容为import sys; print(sys.stdout.encoding),输出必须是utf-8才算对齐 - 如果输出是
ANSI_X3.4-1968或US-ASCII,说明构建系统配置没生效
最容易被忽略的是:改完构建系统后,必须手动切换到它(Tools → Build System → 选你刚建的),Sublime 不会自动启用新系统;另外,sys.stdout.encoding 输出不是 utf-8,说明 -u 没加或路径写错——这两处一错,前面全白配。











