使用方法
页面统计是「粘文本、选范围、点统计」三步:
- 「统计范围」选全部字符、不含空格或不含标点,控制分母口径;默认全部字符。
- 「粘贴要统计的文本」框里直接粘网页正文、标题或文案;演示文本已写好,打开就能看到结果。
- 点「统计文本」,或在文本框按 Ctrl/Cmd + Enter。八张卡片分别给总字符、中文字、英文字母、数字、行数、句子数、空格数、UTF-8 字节数;下方对照表给出常见页面类型的体量参考,可导出 CSV、JSON 或复制 TSV。
- 想换一批按「载入示例」重新填入演示文本。
页面统计能解决什么
它把「这篇有多少字」变成一眼可读的八项指标,适合三类场景:
- 写标题与落地页:搜索引擎和平台常按字数或字符上限截断,统计总字符与中文字能提前知道会不会超长,避免标题被「…」吞掉。
- 公众号与小红书:这类平台对字数、行数敏感,统计行数和句子数可判断阅读节奏;中英文混排时分开计数更能看清语言占比。
- 开发与技术文档:字节数(UTF-8)决定接口与数据库的存储占用,统计它能预判一段文案会不会撑爆字段长度。
本页不做的事:不统计「词频」或「关键词密度」(那是另一类工具);不把中文按词切分(中文没有空格分词,只数汉字个数);不保存你粘的文本,刷新即清空。需要词频请用专门的关键词工具。
原理和变量
① 用了哪个具体函数:核心用 Array.from(text) 把字符串拆成 Unicode 码点数组以正确数字符(表情与生僻字算 1 个),再用正则 match(/[一-龥]/g) 取中文字,用 new TextEncoder().encode(text).length 取 UTF-8 字节数;句子数按句末标点计数。
② 关键参数为什么这样取:总字符用码点而非 string.length,是因为后者按 UTF-16 单位计,一个表情会算成 2,导致字数虚高;码点口径更贴近「人眼看到的字数」。字节数用 UTF-8 而非 UTF-16,因为网络与数据库几乎都按 UTF-8 存储。
③ 遵循哪个标准:字符统计遵循 Unicode 码点定义,字节长度遵循 RFC 3629 的 UTF-8 编码;中文范围取常用汉字区(CJK 统一表意文字基本区),不强行覆盖扩展区生僻字,避免把符号误判成汉字。
④ 输入怎么变成输出:演示文本里 Array.from 得到 N 个码点即总字符;正则筛出中文字得到中文字数;TextEncoder 编码后得到字节数。八项指标对同一段文本同步算出,卡片一一对应。
⑤ 边界与阈值:空文本时总字符为 0,行数计为 0,不报错;超长文本(数十万字)仍能在本地算完,但极端长度可能让卡片渲染略慢。统计范围切换只改变「总字符」是否含空格/标点,不影响中文字等单项。
⑥ 常见误用的正确解释:总字符不等于中文字数(还含英文、数字、标点、空格);「字符数」和「字节数」也不同,一个汉字通常占 3 个 UTF-8 字节;行数按换行符计,末尾无换行时最后一行也算 1 行;句子数按标点估算,连续标点可能多计,仅作参考。
完整示例(文本仅作演示)
保持演示文本:一段中英混排、含数字与标点的短文。
- 总字符:按码点计,含中英文、数字、空格与标点。
- 中文字数:只数汉字,不含英文单词与阿拉伯数字。
- 英文字母:统计
Page、statistics等字母个数。 - 数字:示例中的
123计 3 个。 - 行数:演示文本有两行(按换行符),末行无换行也算 1 行。
- UTF-8 字节:中文约每字 3 字节,英文约每字 1 字节,合计明显大于字符数。
这六项与页面默认卡片、对照表「公众号文章」一行口径一致,可对照理解。
输入范围与对照表
页面统计的对照表列出常见内容类型的体量参考(字符与中文字为示意区间),帮你预判一段文案大致落在哪个量级:
| 内容类型 | 示例长度(字符) | 中文字数 | 行数 | 统计重点 |
|---|---|---|---|---|
| 微博短文 | 140 | 138 | 2 | 是否超字数 |
| 朋友圈 | 200 | 196 | 3 | 表情与字数 |
| 商品标题 | 60 | 58 | 1 | 关键词密度 |
| 商品详情 | 1200 | 1180 | 18 | 段落与行数 |
| 公众号文章 | 5000 | 4950 | 60 | 阅读时长 |
| 小红书笔记 | 1000 | 980 | 14 | 标签数 |
| SEO 落地页 | 800 | 760 | 24 | 标题与密度 |
| 论文摘要 | 600 | 580 | 8 | 中英文混排 |
| 邮件正文 | 400 | 380 | 10 | 短语数 |
| 代码注释 | 300 | 120 | 12 | 英文占比 |
| 新闻稿 | 1500 | 1470 | 20 | 段落结构 |
| 简历正文 | 700 | 660 | 22 | 行数控制 |
| 推文线程 | 900 | 880 | 9 | 多段合并 |
| 说明书 | 2000 | 1960 | 40 | 步骤数 |
| 演讲稿 | 3000 | 2960 | 50 | 时长估算 |
| FAQ 文案 | 1100 | 1080 | 26 | 问答对数 |
对照表是体量参考,非计算结果;真实字数请用上方文本框统计,二者口径不同不要直接相加。
结果边界和舍入
计数性质:所有指标都是整数计数,不存在小数;卡片直接显示个数,不做四舍五入。
什么时候会提示:空文本不报错,各项显示 0;切换统计范围即时重算。页面本身几乎不报错,只有浏览器不支持 TextEncoder 的极老环境字节数可能取不到,那时会提示「当前环境不支持字节统计」。
口径差异:总字符含空格与标点,「不含空格」「不含标点」会分别去掉它们再计总数;中文字、英文、数字三项不受范围影响,始终单独计数,方便你交叉核对。
结果用途:这是本地计数,仅作写作与存储预估,不替代平台的真实截断规则,发布前请以目标平台为准。
常见问题
总字符和字节数为什么差很多?
总字符按「看到的字」计,一个汉字算 1;UTF-8 下汉字通常占 3 字节、英文占 1 字节,所以字节数一般是字符数的 1~3 倍,中文越多差距越大。两者量纲不同,不能比大小。
表情符号算几个字符?
按 Unicode 码点计,一个表情算 1 个字符;若用老式的 string.length 会被拆成 2,所以本页用码点口径,更贴近肉眼字数。
中文词数怎么没有?
中文没有空格分词,本页只数「汉字个数」而非「词语个数」。要词频或分词请用专门的关键词密度工具,本页只做字符级统计。
行数怎么算的?
按换行符(\n、\r\n、\r)切分;末尾无换行时最后一段也算 1 行。所以一段没换行的文本行数是 1,不是 0。
中英文混排会算错吗?
不会。中文匹配汉字区、英文匹配字母,两项独立计数;数字与空格也单列,四项加起来应等于总字符(在「全部字符」范围下)。
统计范围切换影响哪些项?
只影响「总字符」:选不含空格会减掉空格、选不含标点会减掉标点。中文字、英文、数字、行数等单项始终不变,方便你分别核对。
我的文本会被保存或上传吗?
不会。全部统计在浏览器内完成,刷新即清空;可在 Network 面板复查,点「统计文本」时没有任何请求发出。
超长文章能统计吗?
能。本地处理数十万字也没问题,只是卡片渲染可能略慢;若卡顿可分段粘贴统计再相加,本页不限制长度。