sublime text中选定文字的字节数需手动计算:选中文本后,在python控制台执行len(view.substr(sel).encode('utf-8')),结果为utf-8字节数;状态栏“selected: x chars”和view.size()均返回unicode码位数,非字节数,且字节数严格依赖文件真实编码。

Sublime Text 本身不提供“选定文字字节数”的一键显示,view.size() 和状态栏 Selected: X chars 都只返回 Unicode 码位数(字符数),不是字节数。要得到精确字节数,必须明确指定编码并手动编码计算。
选中后用 Python 控制台算 UTF-8 字节数
这是最直接、无插件、结果可控的方式。注意:它依赖你当前文件的编码是否被 Sublime 正确识别——如果文件实际是 GBK 但被误读为 UTF-8,view.substr() 返回的字符串就会错,后续 .encode('utf-8') 结果自然不准。
- 先确保你要统计的文本已被选中(鼠标拖选或
Ctrl+Shift+L拆分多行选区) - 按
Ctrl+`打开 Python 控制台,粘贴运行:
view = sublime.active_window().active_view()
sel = view.sel()[0] # 取第一个选区(多选区时只计第一个)
text = view.substr(sel)
print("UTF-8 字节数:", len(text.encode('utf-8')))
若需 GBK 字节数,把 'utf-8' 换成 'gbk' 即可。但前提是确认文件真实编码是 GBK —— 否则结果无意义。
为什么不能靠状态栏或 Tools: Word Count?
状态栏的 Selected: 123 chars 是 Unicode 字符数,和字节数无关;Tools: Word Count 弹窗里只有 Characters 和 Characters (no spaces),两者都是字符计数,不涉及编码转换。
-
Characters=len(view.substr(sel)),含换行、空格、中文、emoji - 它不告诉你这个字符串在磁盘上占多少字节,因为字节数取决于保存时用的编码
- 同一个中文字符“世”,UTF-8 编码占 3 字节,GBK 占 2 字节,UTF-16(BE)占 2 字节 —— 差异巨大
编码校验失败时怎么救?
如果你发现控制台输出的字节数明显不合理(比如一个纯中文选区算出几百字节,但只选了 10 个字),大概率是 Sublime 读取文件时用了错误编码。此时不要硬算,先做编码校验:
- 右下角状态栏看当前显示编码(如
UTF-8或GBK) - 按
Ctrl+Shift+P→ 输入Reopen with Encoding→ 尝试UTF-8、GBK、UTF-8 with BOM,观察中文是否正常显示 - 一旦显示正常,再执行上面的 Python 控制台命令,结果才可信
- 若切换后仍局部乱码,说明文件本身混用了多种编码(比如复制粘贴进来的内容来源不同),这种情况下无法统一算字节数
真正容易被忽略的是:字节数永远依附于具体编码方案,而 Sublime 的“当前编码”只是它的猜测值。没验证过编码就去算字节数,就像没校准天平就称重——数字看着整齐,但没实际意义。











