写东西的时候经常要关心字数。论文要求八千字,微博限制一百四十字,Twitter 只给 280 个字符(英文)。这些"字"和"字符"到底是不是一回事?为什么同一个文本在不同地方显示的字数不一样?这篇文章把这几个概念说清楚。

字符数和字数有什么区别

字符数是你输入的每一个符号都算一个,包括字母、数字、标点、空格、换行。比如 "Hello 你好" 的字符数是 8(5 个英文字母 + 1 个空格 + 2 个汉字)。在计算机看来,每个字符就是一个 Unicode 编码点。

字数则要看怎么定义。中文语境下通常说的"字数"指的是汉字的数量,不包括标点和空格。但这个规则不统一,有些场合会把标点也算进去,有些不算。文本统计工具一般会同时给出多个指标,让用户自己判断用哪个。

对于纯英文文本来说,"词数"(word count)比字数更有意义。英文的 word count 是按空格分词后统计单词数量。"I love programming" 是 3 个词,字符数是 18(含空格)。中文字数统计没有这么明确的分词标准,所以大多数中文场景下说的字数其实就是字符数或者汉字数。

字节数:跟编码方式有关

字节数是最容易让人困惑的一个概念。同样的内容,字节数可能差好几倍,原因在于字符编码

在 ASCII 编码时代,所有字符都是 1 个字节,没什么歧义。但现在用的是 UTF-8 编码,情况就复杂了:

  • 英文字母、数字、半角标点:占 1 个字节
  • 大部分欧洲语言的重音字符:占 2 个字节
  • 中文、日文、韩文等 CJK 字符:占 3 个字节
  • 一些特殊符号(比如 emoji):占 4 个字节

举个例子:"Hello 世界" 这个字符串:

  • 字符数 = 8(H-e-l-l-o-空-世-界)
  • UTF-8 字节数 = 5 + 1 + 6 = 12 字节
  • 如果是 GBK 编码的话,字节数 = 5 + 1 + 4 = 10 字节(中文 GBK 每个汉字 2 字节)

所以当你看到某个系统报错说"超过长度限制"的时候,先确认它说的是字符数还是字节数,以及用什么编码计算的。

文本统计实际用在哪里

论文字数统计

学校或期刊对论文字数的要求通常是包含正文、不含参考文献和附录的字数。不同学校的计算口径可能不一样:有的算字符数(含标点),有的只算纯汉字,有的连空格和换行都算。提交前最好问清楚具体标准,或者用学校指定的统计工具来算。

Word 自带的字数统计功能其实挺全的,会分别显示字符数(计空格/不计空格)、字数(这里的"字"其实是 word count,对中文不太准确)、段落数、行数等信息。如果需要更精细的控制,可以把文本复制到在线统计工具里看详细数据。

社交媒体的字数限制

微博原来的限制是 140 字,后来改成了根据内容类型动态调整。一条普通的微博可以发 2000 多字,但带图片、视频的话文字额度会减少。微博的计算方式比较复杂,URL 链接不管多长都按固定长度算,这是为了鼓励用户分享链接。

Twitter/X的限制是每条推文 280 个字符。这里明确说是 characters,不是 words。而且 Twitter 对 CJK 字符有优惠待遇:一个 CJK 字符算两个普通字符的位置(因为信息密度高)。所以实际上中文用户能发的内容比英文用户多不少。

微信公众号的标题限制是 64 个字符,正文没有明确的上限,但如果太长会影响阅读体验和加载速度。一般建议正文控制在 2000-3000 字以内。

代码行数统计

程序员有时候要统计代码量,比如写简历的时候想吹一下自己写了多少行代码,或者项目交付时要报告代码规模。这时候统计的是"非空白行数"或者"有效代码行数",不包括空行和纯注释的行。

不同的统计工具有不同的算法。有些只数 .java 或 .py 文件,有些会排除 node_modules 和 vendor 目录,有些会把配置文件也算进去。如果你真的要一个准确的数字,最好说明白是用什么工具、什么参数跑出来的。

词数统计对中文有什么局限

英文做词数统计很简单——按空格和标点切分就行。中文不一样,中文的词与词之间没有空格分隔,要做"词数统计"必须先分词。

分词这件事本身就很难。同样一句话:"南京市长江大桥",可以切成"南京 / 市 / 长江 / 大桥",也可以切成"南京市 / 长江 / 大桥"。不同的分词结果会导致词数不同。

目前主流的分词算法基于词典匹配或者统计模型(比如隐马尔可夫模型 CRF、深度学习的 BERT),准确率能做到 95% 以上,但在专业术语、网络新词、人名地名这些地方还是会出错。

所以中文场景下的"词数"参考价值有限。大多数时候还是看字符数或者汉字数更靠谱。

其他常用统计项

除了上面说的三个主要指标,文本统计工具通常会还提供这些数据:

  • 段落数:按换行符分割后的块数
  • 行数:包含空行的总行数
  • 句子数:按句号、感叹号、问号分割的数量(对中文来说不够准)
  • 平均词长/句长:用于分析文本的可读性
  • 唯一词汇数:去重后的词或字的数量,反映词汇丰富度

这些指标在 SEO 优化、内容质量评估、学术论文分析等领域有用。日常写作一般不需要关注这么多。

常见问题

为什么不同工具的统计结果不一样?

因为"字数"的定义不统一。有的工具按字符数算(每个汉字算 1 个字符),有的按词数算(需要分词),有的把标点也算进去。加上编码方式不同(UTF-8 一个汉字 3 字节,GBK 是 2 字节),字节数也会有差异。用之前先确认工具的统计规则。

微信公众平台的字数怎么算的?

微信公众平台按字符数统计,汉字、字母、数字、标点都算 1 个字符。空格不计入。如果文章超字数限制,优先删减冗余标点和空行。

能统计代码行数吗?

可以。文本统计工具会输出总行数、非空行数和空行数。但不区分代码行和注释行。如果需要更详细的代码统计(有效代码行、注释行、空行),建议用专门的 cloc 工具。

小结

字符数、字数、字节数这三个概念看着差不多,含义和使用场景差别很大。写论文、发微博、填表单之前搞清楚对方要的是哪个指标,免得返工。遇到不确定的情况,把几个数字都准备好,到时候哪个合适用哪个。

文本统计工具

打开文本统计工具 →