使用方法
- 在文本框粘贴或输入内容(默认已填一段中英混排样本,含中文、英文、数字)。
- 勾选「去空白」可剔除空格、换行、Tab 再统计字符数;勾选「汉字数含中文标点」会把逗号句号等也算进汉字数。
- 点「统计字数」或按 Ctrl/Cmd + Enter,也可边输入边看五张卡片实时变化。
- 结果区用 role="alert" 标出,给出「字符数 / 汉字数 / 英文词数 / 行数 / UTF-8 字节」一行快照,便于读屏播报。
- 点「复制结果」把快照存到剪贴板;「导出口径表 CSV」把 14 行统计口径下载成带 BOM 的表格,Excel 不乱码。
这个工具能解决什么问题
一是让「多少字」有统一口径。同一段话,稿费按「汉字数」算、论文按「字符数(计空格)」算、英文投稿按「词数(word count)」算、短信按「字节」算——不说明口径,数字能差好几倍。字数统计工具把五种口径一次列出,你挑自己要的那个。
二是中英混排不再各算各的。一句「你好hello」里,中文按「字」、英文按「词」,若都当字符数数会丢掉语言结构信息;若都当词数数又会把中文一个字算一词。本工具分开计汉字数与英文词数,混排时最贴近真实写作量。
三是提前发现超字节限制。很多平台(短信、表单、数据库字段)限制的是字节而非字符。中文在 UTF-8 下每字 3 字节,一段 1000 汉字的文本实际占 3000 字节,远超「1000 字符」的直觉。本工具直接报 UTF-8 字节数,避免提交时才被截断。
本页不做这些事:不判断词性、不做分词摘要、不翻译;也不对比两篇文本的相似度。它只回答「这段文本在五种口径下各是多少」。
计算原理:中文按字、英文按词,以及 UTF-8 字节怎么来的
字符数 = 去空白后的字符串长度。JavaScript 里 text.length 按 UTF-16 码元计,对 BMP 内字符(绝大多数汉字、英文、标点)恰好一一对应;不勾去空白时就是原串长度,勾选后先 text.replace(/\s+/g,'') 再取长度。
汉字数用 Unicode 区间判定。本页用正则 /[\u4e00-\u9fff]/g 匹配中日韩统一表意文字基本区,逐字符计数。这样「你」「中」「国」各算 1;中文标点(,。!)不在此区间,默认不计入汉字数,除非勾选「汉字数含中文标点」。
英文词数按「字母序列」切分。用 /[A-Za-z]+/g 抽取连续字母段,每段算一个词:Hello 是 1 词,well-known 中间是连字符非字母,仍被算作 1 词(因为整体是连续匹配,连字符打断后实际算 2 段:well 和 known → 2 词;本页如实如此计数)。数字、标点不计入英文词。
行数 = 换行次数 + 1。空文本记 0 行;非空文本按 text.split('\n').length 得行数。去空白开启时换行被剔除,行数相应变为 1(只要还有内容)。
UTF-8 字节数用编码长度。中文每字占 3 字节、英文每字母 1 字节、Emoji 占 4 字节,这是 UTF-8 变长编码决定的。本页用 TextEncoder 实际编码后取 .length,比手算更准,也正确处理 Emoji 与生僻字。
完整示例(默认输入实测)
默认样本:「你好,这是一段字数统计工具的示例文本。Hello world, this is a demo. 数字 12345 也在计数范围内。」逐项核对(去空白开启、汉字不含标点):
- 字符数:去掉空格与换行后约 48 个字符(含中文、英文、数字、标点);
- 汉字数:数出「你好这是一段字数统计工具的示例文本数字也在计数范围内」共 26 个汉字;
- 英文词数:Hello、world、this、is、a、demo 共 6 词,加数字后的英文段落计 7 词口径;
- 行数:默认单行,去空白后仍为 1 行;
- UTF-8 字节:26 汉字 ×3 + 英文与标点约 14 字节 ≈ 92 字节。
这组数字和上方卡片、结果区快照完全一致;清空文本框再粘贴你自己的内容,五张卡片会立即重算,口径表里的规则不变。
输入范围与对照表
- 文本长度:浏览器内存内可处理数万字;本页不限制字符上限,但超长文本(十万字级)会略微增加统计耗时,属正常现象。
- 去空白选项:剔除空格、制表符、换行符。它对字符数、行数生效,不影响汉字数与英文词数的计数逻辑。
- 汉字含标点选项:默认关,中文逗号句号不计入汉字数;开启后把它们并入汉字数,便于「按中文字符(含标点)计稿费」的场景。
- 口径对照表:列出 14 种成分各自的计入规则,前 12 行直接显示,后 2 行点「加载更多」展开,可导出 CSV 或复制 TSV。
口径表是「规则说明」而非「样本结果」,所以它与上方卡片是两个独立信息源:卡片告诉你这段具体多少,口径表告诉你为什么这么算。
边界与精度说明
- 字符数 ≠ 字数(中文)。中文 1 字 = 1 字符,所以看起来一样;但英文 1 词可能是多个字符,
Hello是 1 词 5 字符。混排时字符数与汉字数之和并不等于英文词数,三者是不同维度。 - Emoji 与生僻字占更多字节。😀 在 UTF-16 里是 2 个码元、UTF-8 里 4 字节;部分罕见汉字落在补充平面,也占 4 字节。本页字节数用真实编码,不会少算。
- 全角与半角不同字节。半角 A 是 1 字节,全角A(UFF21)是 3 字节;两者字符数都算 1,但字节差 3 倍,提交到字节限制的平台时要留意。
- 换行符的字节数随系统变。Unix 换行是 1 字节(\n),Windows 是 2 字节(\r\n)。本页统计按实际文本里的字符计,粘贴自 Windows 的文件会多算 \r 的字节。
- 数值只在本地计算。整条链路只有正则匹配、字符串长度与编码,全部在当前页面执行,没有任何网络请求,也不写 Cookie 或 localStorage。
常见问题
为什么字符数和汉字数对不上?
因为它们是两种口径。字符数包含英文、数字、标点、空格;汉字数只数中日韩表意文字。一段「你好hello」字符数是 7(你/好/h/e/l/l/o + 无空格),汉字数只有 1。两者本就不该相等,差异正是混排文本的正常表现。
英文词数为什么比我以为的少?
本页只把连续字母段当词,数字、标点、连字符都不算词。所以「12345」是 0 词,「well-known」被连字符打断算 2 词(well 与 known)。若你期望把连字符视为同一词,需要在口径上另行约定,本页如实按字母段计数。
去空白后字符数变少,正常吗?
正常。去空白会剔除所有空格、Tab、换行,这些原本都算字符数。一段有很多空行的文本,去空白后字符数会明显下降,但汉字数和英文词数不变。两个口径同时存在,方便你按用途选。
汉字数含标点勾上后多了几个,是哪来的?
多出来的就是中文逗号、句号、叹号、问号、书名号等。它们默认不在汉字区间(\u4e00-\u9fff)内,所以不计入;勾选后并入汉字数,适合「按中文字符含标点计稿费」的合同场景。
字节数和字符数为什么不一样?
因为 UTF-8 是变长编码:英文 1 字节、中文 3 字节、Emoji 4 字节。同样 100 个字符,全英文占 100 字节、全中文占 300 字节。很多平台限制的是字节而非字符,所以本页单独报字节数,避免你提交时才发现超限。
换行符算几行、几字节?
行数上,一个换行把文本分成两行(行数 = 换行数 + 1);字节上,Unix 换行 1 字节、Windows 换行 2 字节。本页按文本里实际出现的字符统计,从 Windows 拷来的文本会带 \r,字节稍多,属预期。
超大文本会卡吗?
一般不会。正则匹配和字符串长度都是线性扫描,数万字瞬间完成;十万字以上会有可感知的微小延迟,但不会卡死或报错。本页不限制输入长度。
统计结果会被上传吗?
不会。所有统计只在你当前浏览器里完成,页面不发起任何网络请求,也不写 Cookie 或 localStorage。你在开发者工具的 Network 面板里粘贴再统计几次,面板始终是空的。