文章
单词、字符与大小写:文本计数究竟是怎么算的
统计文字听起来像是计算机绝不会出错的工作,可两个工具却常常对同一段文字给出不同的数字,一个表情符号能让短信一下子只剩70个字符的额度,X上所谓的"280字符"也不是表面看上去那个意思。在按字数限制写作、给变量改名或填充设计稿这些日常琐事背后,藏着几条值得了解的规则。本文就以本站的几个小型文本工具为实例,逐一梳理这些规则。
什么算作一个词
大多数计数工具,包括本站的这个,都采用打字员式的定义:词就是被空格或换行分隔开的一串可见字符。光是这一条规则,就能解释大部分分歧。数字、URL和电子邮件地址都各自算作一个词。这一套约定在没有空格分隔的书面语言里根本行不通:中文书写不靠空白来分词,所以"字数统计"这个概念本身没有太大意义,更该看的是字符数。这一点对中文读者来说尤其贴切:与其争论一段中文文字里"有几个词",不如直接数字符数,这正是实际可用的计量单位。阅读时长的估算又叠加了另一层约定:本站的字数统计工具用每分钟200词这个成年人默读的常见平均速度去除以词数,所以得出的结果只是一个用于规划的参考数字,而不是一个承诺。
一个字符不总是一个符号
字符计数更加模糊,因为Unicode文本本身是分层的。你感知为"一个字符"的东西(字位,grapheme)在底层可能由好几个码点组成,而每个码点又占用JavaScript的length属性所计数的一个或两个16位单元。咧嘴笑脸表情符号在视觉上是一个字位,但占了两个这样的单元,于是一个粗糙的计数器会报告2。由多个人物表情组合而成的家庭表情符号,是一个字位、五个码点、八个单元。就连普通文字也有这个问题:"café"这个词里的é,既可以作为一个码点存储,也可以拆成e加一个组合重音符号来存储,屏幕上看起来一模一样,计数结果却不同。这就是两个计数器结果不一致的原因:它们衡量的是不同的层。把码点归并为用户感知的字符的规则,由Unicode文本分段标准(UAX #29)统一规定,规范实现的计数器都会遵循它。

真正要为之计数的那些限制
字符限制才是计数真正开始牵涉真金白银的地方。一条短信在紧凑的GSM-7字母表下可容纳160个字符,但只要出现一个不在这个字母表里的字符(比如表情符号,或字母表里没有的字母),整条消息就会切换到UCS-2编码,上限随之降到70;超长消息会被拆成每段153或67个字符的分片,分别计费。X允许每条帖子280个字符,但对字符做了加权:无论实际长度多少,每个URL一律算23个字符,而大多数表情符号和中日韩(CJK)文字算2个字符。搜索摘要则采用的是软性限制:谷歌是按像素宽度截断标题和描述的,所以大家熟悉的"标题60字符、描述155字符"只是一种便于操作的经验值,并非硬性保证。当限制真正重要时,就按对应平台使用的那套规则去计数,并留出余量。
大小写是一种约定,每种风格都有自己的用武之地
改变大小写听起来微不足道,直到你遇上叠加在它之上的种种约定。这里说的其实是拉丁字母文本的问题,比如代码标识符或英文标题,中文本身并没有大小写之分。在这类文本中,美式标题偏爱Title Case(每个实词首字母大写),多数欧洲文风指南则更偏爱sentence case(仅句首字母大写)。代码里也有自己的一套家族:JavaScript和Java的变量用camelCase,类名和组件名用PascalCase,Python和数据库里用snake_case,常量用SCREAMING_SNAKE_CASE,CSS类名、文件名和URL slug用kebab-case,用小写可以避开那个经典陷阱,即两个链接仅因大小写不同而被当成不同地址。手动转换几个标识符没什么问题;可一旦要转换八十个的清单,手误几乎是必然的。大小写转换工具会机械式地套用这套转换规则,包括如何处理缩写词、如何处理已有分隔符这些琐碎细节。

占位文字,以及手机怎么也打不开的文件
还有两件小事可以补齐这份清单。评估版式时通常要用占位文字,因为真实的句子会把注意力拉到内容本身;lorem ipsum之所以好用,恰恰是因为它看起来几乎能读懂,却又不是真正可读的拉丁文。本站的生成器可以按段落、句子或单词来生成占位文字,这样设计稿就能填充到贴近实际长度的篇幅,而不是反复粘贴同一小块文字。而当有人发来一个手机怎么也打不开的.md、.json、.csv或.log文件时,基于浏览器的文本查看器可以直接把内容显示出来,不需要安装编辑器,也不用把文件转发到什么转换网站上。以上这一切,包括计数在内,全部在你的浏览器里完成:文字从不离开你的设备,而当你要统计的是一份草稿、一份合同,或是一份满是内部路径的日志时,这一点比平时更重要。
本文涉及的工具
常见问题
一页能放下多少个词?
出版行业的经验值是:单倍行距的一页大约500词,双倍行距的一页大约250词,前提是在A4或Letter纸上使用标准的12号字体。实际文档只要字体、页边距或标题样式一变,就会偏离这些数字,这也是为什么作业和投稿越来越多地直接规定词数,而不是页数。如果文字已经写好了,直接数出来就行,不必依赖估算;页数换算只在文字还不存在的阶段才有参考价值。
lorem ipsum到底是什么意思?
它是被打乱的拉丁文,不是无意义的乱码。这段标准文字节选并重新拼接自西塞罗公元前45年的哲学著作《善恶之极》(De finibus bonorum et malorum);其中"dolorem ipsum"这个片段的意思是"痛苦本身"。打乱正是关键所在:文字看起来像自然语言,词长和句子节奏都很自然,但让人读不进去,于是观看者评判的是版式而不是文案内容。它在现代的流行,通常被归功于20世纪60年代的Letraset转印字贴和80年代的桌面排版软件。
为什么平台统计出的字符数比我用的计数器少?
因为平台是按自己的一套权重来计数的。X的上限是280,但每个URL一律按23个字符计费,大多数表情符号和中日韩(CJK)文字各算2个字符。短信网关只要一出现GSM-7字母表容纳不了的字符,就会把整条消息从160字符的GSM-7切换到70字符的UCS-2模式。而且任何平台都可能是按码元而不是按字位计数的,一个家庭表情符号就可能吃掉限额里的8个字符。当按钮上显示的数字和你自己的计数器对不上时,以平台的规则为准:发送前多留些余量,或者直接用平台自带的计数器核对一下。