piapia123
zh

文字宽度计算

文本

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

「这段文字有多长」有四个不同答案,它们常常差好几倍。这个工具四个一起给:显示宽度(屏幕上占几格,一个汉字 2 格)、码点数(有几个字符)、UTF-16 码元数(JavaScript 的 `.length`)、UTF-8 字节数(存进文件的字节)。 一个 emoji 最能说明差别:`😀` 的码点数是 1、UTF-16 码元数是 2、UTF-8 字节数是 4 —— 所以「限制 20 字」的表单到底按哪个口径算,只有四个都给才说得清。显示宽度复用站内终端折行的既有实现,不会与别处对不齐。 还会单独列出超出 80 / 100 列的行(代码与提交信息的常见上限)。全部在浏览器里计算,不联网、不上传。

功能

  • 四种口径一次给出:显示宽度 / 码点数 / UTF-16 码元数 / UTF-8 字节数
  • 显示宽度按东亚宽度算,一个汉字 2 格、一个 ASCII 1 格
  • 列出超出 80 列与 100 列的行,并给出每行的实际宽度
  • 可逐字符列出宽度明细,看清是哪几个字符把行撑宽了
  • 与终端折行共用同一份宽度实现,不会分叉
  • 按码点处理,emoji 与组合字符不会被拆坏
  • 每项可单独复制

使用方法

  1. 把文本粘进输入框(可多行)
  2. 四个数字与超宽行清单立刻出现
  3. 需要细看就打开「字符明细」
  4. 点行末复制按钮取走单个数值

常见问题

「20 字限制」到底是哪一种?
这取决于对方怎么算。表单常按码点,数据库常按 UTF-16 码元,接口与存储常按字节。四种一起给出,你就能对照对方的规则判断。
为什么一个 emoji 会有三个不同的长度?
它是 1 个码点(一个字符),但在 UTF-16 里占 2 个码元(一个代理对),存成 UTF-8 又是 4 个字节。这不是 bug,是三种计数口径本身不同。
显示宽度是怎么算的?
按东亚字符宽度:汉字、假名、全角符号算 2 格,ASCII 与半角算 1 格,emoji 也算 2 格。用的是站内终端折行同一份实现,保证别处对齐一致。
数据会上传吗?
不会。全部在浏览器内存里计算,不发送任何请求,断网也能用。

相关工具