sublime运行中文显示方框90%是解码失败;需区分文件内容乱码(改fallback_encoding为"chinese (gbk)")与侧边栏/标题栏方框(须配.sublime-theme中sidebar_label类并重启)。

Sublime 运行中文显示方框,90% 是解码失败,不是字体或 DPI 问题;必须区分「文件内容乱码」和「侧边栏/标题栏方框」两类问题,它们成因、修复路径完全不同。
打开 Python 文件后 print("中文") 输出问号或 □
这是 Sublime 的 Build System 按系统 locale(如 Windows 的 GBK)启动 Python 进程,而控制台却用 UTF-8 解析字节流导致的错位。改源码编码或 default_encoding 完全无效。
- Windows 用户:在 Build System 配置中显式指定环境变量,例如在
Python.sublime-build的"env"字段加"PYTHONIOENCODING": "utf-8" - macOS/Linux 用户:确认终端 locale 是 UTF-8(
locale | grep UTF),否则在env中设"LANG": "en_US.UTF-8" - 别依赖
# -*- coding: utf-8 -*-—— 它只影响 Python 如何读源文件,不影响print()输出编码 - 验证方式:运行
print("中文".encode('utf-8')),看输出是否为b'\xe4\xb8\xad\xe6\x96\x87',再比对控制台是否原样显示字节串
侧边栏/标签页/菜单栏中文显示为 □
这不是编码问题,是 Sublime 的 UI 渲染层未命中中文字体。全局 font_face 和 fallback_encoding 对它完全无效,必须通过 .sublime-theme 文件配置 "class": "sidebar_label"。
- 进入
Preferences → Browse Packages… → User/,新建sidebar-fix.sublime-theme - 写入最小有效配置(注意 JSON 语法和引号):
[{ "class": "sidebar_label", "font.face": "Noto Sans CJK SC", "font.size": 13, "line_height": 1.35 }] - 在
Settings – User中添加:"theme": "sidebar-fix.sublime-theme" - 必须彻底退出并重开(
Ctrl+Q/Cmd+Q),Ctrl+R不重载 theme - Linux 用户额外检查:系统是否真装了该字体(
fc-list | grep -i "noto"),且没被fontconfig规则屏蔽
文件内容打开即显示方块或问号
典型表现是新建文件打中文正常,但打开旧项目里的 .py/.txt 就乱码——说明 Sublime 没按文件真实编码读取,而是硬试 UTF-8 失败。
- 先右下角点击当前编码(如
UTF-8)→Reopen with Encoding → Chinese (GBK),能恢复就确认是编码识别失败 - 不要设
"fallback_encoding": "UTF-8"—— 这个字段不接受标准编码名,正确写法是"fallback_encoding": "Chinese (GBK)" - 若项目混用编码,禁用自动探测:
"detect_encoding": false,避免它在 UTF-8 BOM 文件上误判 - 保存时防 BOM:加
"save_with_bom": false,否则 Git 或 Python 解释器会报Non-UTF-8 code starting with '\xef' - 慎用 ConvertToUTF8 插件:ST4.4+ 已失效;改用
Codecs37,它能状态栏显示真实编码并一键切换
高分屏下标题栏/菜单栏变方块(仅 Windows/macOS)
这是 DPI 缩放 bug,不是字体缺失。设 "dpi_scale": 1.0 确实能让中文显示,但会整体缩小 UI,属于降级妥协,不是修复。
- Windows:优先尝试系统级设置——右键 Sublime 快捷方式 → 属性 → 兼容性 → 更改高 DPI 设置 → 勾选“替代高 DPI 缩放行为”,缩放执行者选“应用程序”
- macOS:确保系统“显示器”设置中缩放选的是“默认”,而非“缩放”模式下的高分辨率档位
- 如果必须调
dpi_scale,请同步调大font_size和 theme 中的sidebar_label.font.size,否则侧边栏文字会挤在一起 - 别信“改 font_face 就能解决标题栏方块”——标题栏字体由操作系统直接渲染,Sublime 只传字符串,不控字体回退
最常被忽略的一点:Sublime 的「文件内容解码」「UI 字体渲染」「构建输出编码」三者完全解耦,各自有一套配置路径。混用同一套设置去修所有方框,只会让问题更难定位。











