最后更新:
表情符号算几个字?- 一个表情不一定等于一个字的原因
一个笑脸算 1 个字吗?那家庭表情呢?其实,看起来是一个表情符号,内部可能是由多个字符组合而成的。你有没有在 X (原 Twitter) 上遇到过"明明应该还能再打一个字,却打不进去"的情况?
表情符号的字数计算
| 表情符号 | 外观 | Unicode 字数 | UTF-16 长度 | UTF-8 字节数 |
|---|---|---|---|---|
| 😀 | 1 个 | 1 字 | 2 | 4 字节 |
| 👍 | 1 个 | 1 字 | 2 | 4 字节 |
| 👍🏽 | 1 个 | 2 字 | 4 | 8 字节 |
| 👨👩👧👦 | 1 个 | 7 字 | 11 | 25 字节 |
| 🏳️🌈 | 1 个 | 4 字 | 6 | 14 字节 |
| 🇯🇵 | 1 个 | 2 字 | 4 | 8 字节 |
家庭表情看起来是 1 个,但内部其实是"男性 + 连接符 + 女性 + 连接符 + 女孩 + 连接符 + 男孩"共 7 个字符组成的。
为什么表情符号的字数各不相同?
| 机制 | 说明 | 示例 |
|---|---|---|
| 基本表情 | 1 个码位 = 1 字 | 😀 (U+1F600) |
| 肤色 | 基本表情 + 肤色修饰符 = 2 字 | 👍🏽 = 👍 + 🏽 |
| ZWJ 组合 | 用不可见字符把多个表情连起来 | 👨👩👧👦 = 👨 + ZWJ + 👩 + ZWJ + 👧 + ZWJ + 👦 |
| 国旗 | 2 个地区指示符的组合 | 🇯🇵 = 🇯 + 🇵 |
ZWJ 是"Zero Width Joiner"(零宽连接符) 的缩写,它在屏幕上看不见,但会被计入字数。
社交平台上表情符号的字数计算
| 平台 | 😀 的计算 | 👨👩👧👦 的计算 | 计算方式 |
|---|---|---|---|
| X (原 Twitter) | 算 2 字 | 算 2 字 | 所有表情一律按权重 2 计算 |
| 短信 (SMS) | 1 个表情就切换到 70 字限制 | 同左 | 编码方式切换 |
X 的帖子上限是 280 个权重单位,每个表情符号消耗权重 2。半角英文数字 1 个字符是权重 1,所以一个表情就占掉相当于 2 个英文字符的空间。而像中文、日文这样 1 个字符被定为权重 2 的文字,一个表情占的就和 1 个汉字相同 (全部用中文书写时实际上限是 140 字)。这种权重方式不看内部的码位数,所以像 👨👩👧👦 这样的组合表情消耗的也还是 2。正如 X 字数限制的历史中提到的,表情符号的处理方式正是字数计算复杂性的缩影。
也有像 Instagram、LINE 这样不公布计数方式的服务。没有官方说明时,最可靠的办法是在输入框里加一个表情,观察剩余字数的减少量。看起来只有一个、内部却由多个字符组成的表情,减掉的数量可能比预想的多。
短信与表情符号的意外关系
短信 (SMS) 只要加入一个表情符号,字数限制就会发生巨大变化。
| 条件 | 每条短信的字数 | 编码方式 |
|---|---|---|
| 仅英文数字 | 160 字 | GSM-7 (7 位) |
| 仅中日文 | 70 字 | UCS-2 (16 位) |
| 包含表情符号 | 70 字 | 切换为 UCS-2 |
英文短信每条可以发 160 字,但只要加入一个表情符号,就会切换到 UCS-2 编码,变成只能发 70 字。仅仅一个表情,就损失了 90 字的容量。
这个 70 指的是一条短信能装下的 16 位单位的个数。多数表情符号超出 16 位、一个要占用 2 个单位,所以只发表情的话一条短信只能装下 35 个左右。带肤色或用 ZWJ 组合的表情消耗的单位更多,👨👩👧👦 就要占 11 个单位,一个表情占掉相当于 11 个汉字的空间。
表情符号的数量还在不断增加
| 年份 | Unicode 版本 | 表情总数 | 新增的主要表情 |
|---|---|---|---|
| 2010 | 6.0 | 约 720 | 基本的脸、动物、食物 |
| 2015 | 8.0 | 约 1,630 | 肤色变体 |
| 2020 | 13.0 | 约 3,300 | 忍者、珍珠奶茶、海狸 |
| 2024 | 16.0 | 3,790 | 指纹、竖琴、泼溅 |
| 2025 | 17.0 | 3,953 | 虎鲸、长号、宝箱 |
上表的件数按 Unicode 官方发布的表情数据文件的口径统计,计数对象是包含全部显示指定的形式 (完全限定) 的序列,再加上肤色 5 种和发型 4 种的构成要素。口径不同,总数就会不同,如果和其他资料对不上,请先确认统计基准。
截至 2026 年 8 月,最新版本是 17.0,共 3,953 件,比上一版 16.0 增加了 163 件。作为手机表情广为人知的 1999 年 NTT DoCoMo (i-mode) 表情有 176 种,在那之前还有 1997 年 J-Phone 的约 90 种实现。以 i-mode 的 176 种为起点,26 年间增长了 20 倍以上。
编程中表情符号的字数
在编程中正确计算表情符号的字数,其实是一个非常棘手的问题。
| 编程语言 | "👨👩👧👦".length 的结果 | 原因 |
|---|---|---|
| JavaScript | 11 | UTF-16 代码单元数 |
| Python | 7 | Unicode 码位数 |
| Swift | 1 | 字素簇数 (外观上的字数) |
同一个表情符号,不同编程语言计算出的"长度"分别是 1、7、11,结果完全不同。作为字数和字节数区别的进阶问题,表情符号是最复杂的案例之一。