字数统计:中文、英文、表情符号到底怎么算

更新于 6 分钟阅读

把同一段文字粘进两个统计工具,得到两个不同的数。两个都不一定算错,因为「字数」「字符数」「长度」各自都有不止一种定义,而你要满足的限制,又是由平台的开发者自己定义的。

字符数:空格、换行和「一个字符」是什么

人们说的「字符数」其实是三种数字:

数字空格换行
字符数(含空格)算一般不算
字符数(不含空格)不算不算
UTF-16 编码单元数,即 JavaScript 里 string.length 的结果算算一个或两个

对普通英文,前两种相差的就是空格的个数,需要哪一种取决于你面对的规则。论文系统和 meta 描述的常见限制按含空格的字符数算;有些翻译报价按不含空格的字符数算。拿到数字之前先确认是哪一种。

第三行是大多数不一致的来源。程序员读到 "hello".length 会以为它等于人眼看到的字符个数。普通字母确实如此,其他文字就不是了。

表情符号和重音字母:读者看是一个,程序看是多个

家庭表情 👨‍👩‍👧 实际上是三个表情,中间用不可见的连接符拼起来。它在 JavaScript 里的 .length 是 8,UTF-8 下占 18 个字节,而读者看到的是一个符号。带重音的字母,可以存成一个码点,也可以存成基础字母加组合符号,两种在屏幕上看起来完全一样。

计数工具可以按「用户感知的字符」(字素)来统计人眼看到的数量。字数统计工具就是这样做的,所以一个表情符号或带重音的字母算一个字符。表格软件里的长度公式和很多脚本数的是编码单元,因此一个单元格里放三个表情,可能报出远大于 3 的数字。

如果平台的算法和你看到的不同,以平台的规则为准。比如 X 把每个汉字按两个字符加权,一个「每个可见字符算一个」的计数器,读数就会比平台的低。任何限制都应当留出余量。

词数:空格并不总是边界

最简单的词数统计按空格切分。这对一句英文有效,到了以下情形就失灵:

  • don't 应该算一个词,而简单地按标点切会得到两个。
  • state-of-the-art 这样带连字符的短语,大多数读者当作一个词,而在连字符处断开的分词器会得到四个。这个工具会把「两侧都有单词的连字符」重新接起来,算作一个。
  • 中文和日文没有空格。你好,世界 里根本没有用空格隔开的词。

对中文和日文,工具使用浏览器自带的分词器,按词典切分。这是一种近似:不同浏览器、不同版本对同一句话的切分可能略有差别,所以含中日文的文本,词数可能在不同浏览器之间有小幅变动。这也是为什么工具把「中日韩文字数」作为单独的精确数字列在旁边。统计中文时,报字数请用这个数。

中文字数:编辑说的「字数」是哪一种

中文出版语境里「字数」通常指字,但细节取决于对方的要求:有的要求包含标点,有的不包含;有的把数字和英文字母也逐个计入。按规格交稿之前,先问清楚。

在这个工具里,总字符数包括标点、数字和字母。中日韩文字数只统计汉字、平假名、片假名和谚文,所以全角标点「,」「。」包含在前一个数里,不在后一个数里。用前者减后者,可以快速知道文本里标点和拉丁字符占多少。

文字处理软件也有自己的规则。Microsoft Word 对东亚文字的计数方式与用空格分隔的词不同,因此中英混排的文档在 Word 里和浏览器里读出来可能不同。数字很重要的时候,用接收方使用的那个工具。

短信:160、70,以及超出之后会怎样

一条短信可以容纳 160 个 GSM-7 字符,如果内容需要 UCS-2 编码,则只有 70 个。只要出现一个 GSM-7 字符集以外的字符,整条短信就会改用 UCS-2。汉字会触发这一点,大多数表情符号和排版用的弯引号也会。更长的短信会被拆成串联的分段,每段 GSM-7 为 153 个字符,UCS-2 为 67 个字符,因为拼接用的头信息占了位置。

另外两点:

  • GSM-7 里有些字符占两个位置,包括 €、[、]、{、}。
  • UCS-2 短信里的一个表情符号占 70 个位置里的两个,因为它存成一对编码单元。

工具的限制进度条有 160 的选项和一个自定义输入框,每个可见字符算一个,它不会检测你的短信会使用哪种编码。中文短信请把自定义上限设成 70;一条含有零星表情或弯撇号的英文短信,要按较短的上限来算。

标题、描述和推文的限制

限制性质注意
页面标题 title,约 60搜索结果里的经验值实际按像素宽度截断,所以 60 只是估计
meta 描述,约 160显示惯例搜索引擎可能完全换成另一段摘要
X 推文,280硬性上限有加权:汉字算两个,链接有固定的占用
短信单条,160 / 70计费与投递单位取决于编码,见上文

工具提供 60、160、280 三个预设和一个自定义选项。前两个是经验规则,所以进度条停在线下一点点,只能当作大致通过;重要的标题,用按像素宽度的预览来确认。X 的 280 是平台自己计算的,以它自己的发布框为准。中文标题尤其要注意:一个全角汉字的宽度大约是两个拉丁字母,所以中文标题按字符数算不到 60,就可能已经被截断。

阅读时间只是平均值

工具估算阅读时间时,有空格的语言按每分钟 238 词,中日韩文字按每分钟 400 字;朗读时间按每分钟 130 词、220 字。混合文本会把两部分相加。这些数字适合做规划:密集的技术文章读得慢,扫一眼的清单读得快。

字节数:存数据库时才重要

工具还会显示 UTF-8 体积。一个汉字在 UTF-8 里占三个字节,一个英文字母占一个,表情符号一般占四个。如果你要把文本存进一个限制为字节数的字段,比如某些数据库列定义成多少字节,那么 100 字的中文就要占 300 字节左右,而不是 100。这时用字节数判断,才不会存入时被截断。

到底用哪个数字

  • 满足某个平台的限制:用该平台自己的计数器,其他工具的数都只当作估计。
  • 报中文或日文的篇幅:用中日韩文字数。
  • 写有空格分词的语言:长度看词数,填字段看含空格的字符数。
  • 把文本存进数据库的列:看 UTF-8 的字节数,因为列限制常常以字节定义,而一个汉字占三个字节。

打开工具: 字数统计工具

返回指南列表

更多指南