"一个字"到底怎么数
数字数看似简单,但在计算机里,"一个字符"至少有四种数法:肉眼看到的一个符号(字素簇,grapheme)、一个 Unicode 编号 (码位)、JavaScript 的 String.length 所数的 16 位单元(UTF-16 代码单元),以及存储占用的字节数。普通的汉字、英文和数字,这几种结果一致;一旦出现表情符号、组合符号或生僻字,结果就会分叉。本页的 "含空格/不含空格"按字素簇统计,也就是和你在屏幕上数出来的一样,同时把码位数和 JS length 单独列出,方便与其他系统对照。
下表是构建本页时实际计算出的数值,并非手工填写,你可以直观看到同一个"字"在不同口径下的差异。
| 文本 | 可见字数(字素) | 码位 | JS length | UTF-8 字节 |
|---|---|---|---|---|
| 汉字 "汉字" | 2 | 2 | 2 | 6 |
| 全角标点 "," | 1 | 1 | 1 | 3 |
| 英文 "Hello" | 5 | 5 | 5 | 5 |
| 生僻字 "𠀀"(扩展B区) | 1 | 1 | 2 | 4 |
| 带声调拼音 "é"(e + 组合符号) | 1 | 2 | 2 | 3 |
| 表情 👍 | 1 | 1 | 2 | 4 |
| 国旗表情(两个区域指示符) | 1 | 2 | 4 | 8 |
| 家庭表情(ZWJ 连接) | 1 | 5 | 8 | 18 |
从表中可以读出几个要点。常用汉字在 UTF-8 中占 3 个字节,而英文字母只占 1 个,所以同样"一百个字",中文文本的体积约是纯英文的三倍, 这对数据库字段长度和短信限制很重要。扩展区的生僻字(如 𠀀)在 UTF-16 里要用两个单元,看起来是 1 个字,length 却是 2。 表情符号也是同理,而"家庭"这类由多个表情用不可见连接符(ZWJ)拼成的符号,屏幕上只有 1 个,却有 5 个码位、18 个 UTF-8 字节。 如果输入框下方出现"含有按不同方式计数会得到不同结果的字符"的提示,说明文本里有这类符号,更严格的系统可能给出更大的数字。
中文的"词数"为什么只能参考
英文靠空格分词,而中文书写不留空格,所以"按空格分词数"对纯中文文本几乎没有意义,整段话可能只算 1 个。本页同时给出 "分词估计",它使用浏览器内置的 Intl.Segmenter 做词语切分,属于基于词典的估计,不同浏览器、不同版本的结果可能不同, 也不等于专业分词工具的结果。需要精确的词数时,请以字数为主。另外还提供"汉字+英文单词"一项:汉字每个算 1,连续的英文字母或数字组成的单词算 1, 部分文字处理软件的"字数"采用类似口径,但具体规则各软件不同,以投稿方要求为准。
含空格与不含空格,该看哪个
简历、征文、论文摘要多数以"含空格"或"含标点"字数给出上限,但并非绝对;有些平台只统计汉字,有些把标点也算进去。换行是否计入也因系统而异, 有的算 1 个,有的算 2 个(回车加换行)。所以最终提交前,一定要在对方的输入框里再核对一次,并留出几个字的余量。本页的"不含空格"会去掉所有空白字符 (空格、制表符、换行),而标点仍会计入。
计算示例
例 1:带表情的短句。"今天也要加油👍"肉眼数是 7 个字(6 个汉字加 1 个表情),而 JavaScript 的 length 会给出 8, 因为表情占两个 UTF-16 单元。如果表单用 length 校验、上限又卡得很紧,看上去没超的内容也可能被判超限。上限很严格时,尽量避免表情符号。
例 2:压缩一份 800 字的摘要。初稿为 862 字时需要删去 62 字。把目标字数设为 800,状态栏会显示"超出 62 字",你可以边删边看数字回落。 常见的压缩办法是删去重复的修饰语、把"进行分析"改成"分析"、把"对……做出改进"改成"改进……",每处通常能省几个字。最终建议停在 795 字左右,给换行计数差异留余地。
常见误区与局限
第一,在 A 软件里数完,却在 B 系统里提交,二者对脚注、页眉、表格内文字、空格和换行的规则可能不同。第二,从 PDF 或网页复制的文字常带有看不见的字符, 如不换行空格或零宽空格,会让数字多出几个。第三,社交媒体的参考值只是粗略参考,平台可能有链接缩短、对中日韩文字加权计数等规则, 因此界面显示的"280"并不等于你能写满 280 个汉字,发布前以对应应用里的计数器为准。第四,本页不检查错别字、语法、重复率或关键词密度。 学位论文、专利、法律文书等对"字数"口径(是否含参考文献、图表、摘要)有明确规定,请遵循主管方的定义。
配合使用的工具:比较两版文稿的差异可用文本对比工具;按规则批量清理文字可先在正则表达式测试器里试验;估算阅读所需时间可用阅读速度测试, 练习输入速度可用打字速度测试。
常见问题
换行算不算字数?
在"含空格"的总数里,本工具把一个换行算 1 个字符;在"不含空格"里不算。有些系统把换行算作 2 个字符,段落较多时建议留出几个字的余量。
为什么一个表情有时算 2 个字?
多数表情在 UTF-16 里占两个单元,用 JavaScript length 校验的系统会把它算成 2。本工具按可见符号计为 1,并另外显示 JS length 和码位数以便对照。
和 Word、WPS 统计的字数不一样,为什么?
不同软件对空格、标点、脚注、文本框、页眉页脚以及英文单词的处理规则不同。以投稿或提交系统所用的口径为准,可以用"汉字+英文单词"一项作参考。
全角标点和半角标点算几个字?
本工具把全角和半角标点都当作 1 个字符。UTF-8 字节数不同,全角标点通常是 3 个字节而半角是 1 个,需要按字节限制时请看"UTF-8 字节"一项。
输入的内容会被保存或上传吗?
不会。所有统计都在浏览器本地完成,不会发送到服务器,也不会保存。关闭或刷新页面后,输入框会被清空。