小红书文案字数统计
emoji 按用户感知计数 · 正文 1000 字与标题 20 字上限检测 · 文案不上传
📖 使用说明
- 把写好的文案粘贴进正文框,标题单独填在标题框,字数会随输入实时更新。
- 顶部"正文占用"按最费字的口径计算:三种口径里取最大的那个, 这样只要它没超 1000,三种口径下都不会超。
- 表格里可以逐项核对汉字、emoji、话题标签、空格各占多少,方便定位"字数去哪了"。
- 写完点"复制原文"取回文本,内容始终只在你本机。
❓ 常见问题
Q:emoji 到底占几个字?
A:没有唯一答案,取决于计数口径。按用户感知(字素簇)一个表情算 1 个; 按 UTF-16 码元,😀 算 2 个,🏃♀️ 算 5 个,👨👩👧 算 8 个,国旗 🇨🇳 算 4 个。 本站三种口径都给出来,可以拿编辑器里的实时字数对照,确认平台用的哪一种。
Q:统计结果和平台显示的完全一致吗?
A:不做这种保证。平台内部的计数实现没有公开说明且会调整, 所以本站给出三种口径,并用最费字的那一种算剩余额度—— 结果永远偏保守,宁可提示你少写了,不会让你发出去才发现超限。
Q:文案内容会被上传吗?
A:不会。统计是一段纯 JavaScript 在浏览器里跑的,文本只存在于当前页面的内存变量中, 不发网络请求、不写本地存储,刷新或关闭页面就没了。
🧮 为什么同一个表情会算出不同的字数
Unicode 里"一个 emoji"并不是"一个字符"。以 🏃♀️ 为例,它由四个码点拼成: 跑步者 U+1F3C3、零宽连接符 U+200D、女性符号 U+2640、变体选择符 U+FE0F。 前两个码点在 UTF-16 里各占 1 个码元,而 U+1F3C3 属于补充平面,需要两个码元表示, 所以它在 JavaScript 的 length 里是 5。公式可以写成:
码元数 = Σ(每个码点的码元宽度),其中 BMP 内为 1、补充平面为 2; 字素簇数 = 把由 ZWJ / 变体选择符 / 键帽符 / 区域指示符连起来的序列算作 1。
这解释了一个常见困惑:文案里看着只加了 10 个表情,平台却提示多占了二三十字—— 因为组合表情(肤色、性别、家庭、国旗)的成本是普通表情的好几倍。 下面的对照表用真实字符算过,可以直接对照:
| 表情 | 组成 | 码点 | 码元 | 字素簇 |
|---|---|---|---|---|
| 😀 | 基本 emoji | 1 | 2 | 1 |
| ❤️ | 符号 + 变体选择符 | 2 | 2 | 1 |
| 🏃♀️ | ZWJ 组合 + 性别符号 | 4 | 5 | 1 |
| 👨👩👧 | 三个 emoji 用 ZWJ 连接 | 5 | 8 | 1 |
| 🇨🇳 | 两个区域指示符 | 2 | 4 | 1 |
| 1️⃣ | 数字 + 键帽符 | 3 | 3 | 1 |
🧾 示例演算
以示例文案为例,逐项拆开是这样算出来的:
今天试了 3 款跑步鞋,最轻的一双只有 180g!🏃♀️ 附上实测数据👇 #跑步 #跑鞋测评
| 项目 | 数值 | 来源 |
|---|---|---|
| 字素簇(用户感知) | 44 | 汉字 27 + 标点 4 + 数字 4 + 字母 1 + emoji 2 + 空格 6 |
| Unicode 码点 | 47 | 两个 emoji 的码点数分别是 4 和 1,比"各算 1 个"多出 3 |
| UTF-16 码元 | 49 | 两个 emoji 合计占 7 个码元,其余字符各占 1 |
| 汉字 | 27 | 其中 6 个来自话题标签:#跑步(2)、#跑鞋测评(4) |
| emoji | 2 | 🏃♀️(5 码元)+ 👇(2 码元)= 7 码元 |
| 数字串 | 2 | 3、180;字母 g 计入英文单词,共 1 个 |
| 话题标签 | 2 | #跑步、#跑鞋测评,标签内文字同时计入汉字数 |
结论:这段文案"看起来"是 44 个字,但在最严的口径下占 49 字。如果正文已经写到 990 字, 再补两个组合表情就可能越过 1000 字上限——这正是把 emoji 单独统计的意义。
🎯 适用范围
- 小红书笔记正文与标题的限字自查,尤其是 emoji、话题标签很多的文案。
- 抖音图文、微博、公众号摘要、B 站简介等有字数上限的短文案场景。
- 需要按字符数报价的文案代写、脚本外包结算前的核对。
- 不适用于:需要按平台内部规则精确复现字数的场景(规则未公开,请以编辑器提示为准)、 以及查重系统的字符数口径统计(见"论文查重字数统计"工具)。