- 阅读时间
- 0秒钟
- 朗读时间
- 0秒钟
- 平均单词长度
- 0
- UTF-8 字节数
- 0
- UTF-16 代码单元(String.length)
- 0
- Unicode 码位
- 0
工作原理
统计字符看似简单,直到遇到表情符号。人眼看到的数量,既不等于数据库存储的数量,也不等于编程语言返回的数量:家庭表情在屏幕上是一个字符,但它有 5 个 Unicode 码位、8 个 UTF-16 代码单元(JavaScript、Java 或 C# 中 String.length 的返回值),在 UTF-8 中占 18 个字节。本工具同时显示这四种计数,既适用于营销文案,也适用于确定 VARCHAR 列的长度。
单词、句子和字符都按浏览器内置的 Unicode 分段规则统计,也就是它移动光标或双击选词时用的规则。因此它同样适用于中文、日文等不以空格分词的语言,也不会把带组合重音符的字母算成两个字符。
阅读时间采用一项涵盖 190 项研究的元分析(Brysbaert,2019)得出的平均速度:非虚构类默读每分钟 238 个单词,朗读每分钟 183 个。文本不会离开你的浏览器,也不会保存在分享链接中。
示例
👨👩👧1 · 5 · 8 · 18可见字符 1 个、码位 5 个(三个表情由两个不可见的连接字符相连)、UTF-16 代码单元 8 个、UTF-8 占 18 个字节。如果某个 API 限制为 280 个"字符",最好弄清楚它用的是哪一种计数。SMS · 151 GSM-7 → 151 UCS-21 SMS → 3 SMS一条 151 个字符的短信用 GSM 字母表只需一条,但只要出现一个 í,手机就会改用 UCS-2,每段只能容纳 67 个字符:同样的内容变成了三条短信。café (NFC) · cafe + ◌́ (NFD)4 · 5同一个单词里的 é 可以存成一个码位,也可以存成 e 加一个组合重音符。两者在屏幕上完全相同,本工具都计为 4 个字符,但 String.length 会返回 4 或 5。使用场景
- 把标题和 meta 描述控制在 Google 不会截断的长度内。
- 计算一次营销活动或验证码要占几条短信,并找出让成本变高的那个字符。
- 确定数据库列的长度,或校验有字节上限的字段,例如 MySQL utf8mb4 下的 VARCHAR。
- 满足作业、摘要或征稿的最少或最多字数要求。
- 估算读完一篇文章或录制一段稿子需要多长时间。
- 在发布文本前找出重复过多的词。
常见问题
为什么别的计数器给出的数字不一样?
因为计数方式并不唯一。许多计数器使用 String.length 统计 UTF-16 代码单元,所以一个表情会算作 2 个或更多;还有些用会在撇号处断开的正则表达式分词,把 "don't" 或 "l'eau" 算成两个单词。这里的字符就是屏幕上看到的字符,单词遵循 Unicode 规则,最接近人的计数方式。
为什么一个重音字母会改变短信费用?
7 位 GSM 字母表每条短信允许 160 个字符,但并不包含所有带重音的字母:有 é、ñ、ü 和 à,却没有 á、í、ó、ú。只要出现一个不在该字母表中的字符,整条短信就会改用 UCS-2,上限降到 70 个字符,需要拆分时每段 67 个。有些运营商使用包含这些字母的西班牙语国家表,但最好不要指望这一点。
Google 的标题可以有多少个字符?
Google 不是按字符数截断,而是按像素宽度截断,桌面端约 600 像素,因此实际上限取决于所用字母:W 比 i 宽得多。50 到 60 个字符通常能完整显示;meta 描述大约显示到 155 至 160 个字符。本工具的进度条以这些数值为参考。
统计结果与 X(Twitter)一致吗?
大多数情况下一致,但并不完全相同。X 会把每个链接不论长短都算作 23 个字符,把中文、日文和韩文字符算作 2 个。对于不含链接的拉丁字母文本,数字是一样的。
文本在数据库中占多少字节?
取决于列的编码。在 UTF-8 中,英文字母占 1 个字节,带重音的字母和西里尔字母占 2 个,中文占 3 个,表情符号占 4 个。MySQL 在 utf8mb4 下按字符计算 VARCHAR 长度,但行的上限按字节计算;SQL Server 的 NVARCHAR 使用 UTF-16,对应本工具的 UTF-16 代码单元数。