表情符号算几个字? - 一个表情不一定等于一个字的原因

约 5 分钟阅读

一个笑脸算 1 个字吗? 那家庭表情呢? 其实,看起来是一个表情符号,内部可能是由多个字符组合而成的。你有没有在 X (原 Twitter) 上遇到过"明明应该还能再打一个字,却打不进去"的情况?

表情符号的字数计算

表情符号外观Unicode 字数UTF-16 长度UTF-8 字节数
😀1 个1 字24 字节
👍1 个1 字24 字节
👍🏽1 个2 字48 字节
👨‍👩‍👧‍👦1 个7 字1125 字节
🏳️‍🌈1 个4 字614 字节
🇯🇵1 个2 字48 字节

家庭表情看起来是 1 个,但内部其实是"男性 + 连接符 + 女性 + 连接符 + 女孩 + 连接符 + 男孩"共 7 个字符组成的。

为什么表情符号的字数各不相同?

机制说明示例
基本表情1 个码位 = 1 字😀 (U+1F600)
肤色基本表情 + 肤色修饰符 = 2 字👍🏽 = 👍 + 🏽
ZWJ 组合用不可见字符把多个表情连起来👨‍👩‍👧‍👦 = 👨 + ZWJ + 👩 + ZWJ + 👧 + ZWJ + 👦
国旗2 个地区指示符的组合🇯🇵 = 🇯 + 🇵

ZWJ 是"Zero Width Joiner"(零宽连接符) 的缩写,它在屏幕上看不见,但会被计入字数。

社交平台上表情符号的字数计算

平台😀 的计算👨‍👩‍👧‍👦 的计算计算方式
X (原 Twitter)算 2 字算 7-11 字独特的加权方式
Instagram算 1 字算 1 字按外观的表情数
LINE算 1 字算 1 字按外观的表情数
短信 (SMS)1 个表情就切换到 70 字限制同左编码方式切换

在 X 上,一个表情符号算 2 个字。在 140 字的限制下大量使用表情,能写文字的空间就会越来越少。正如 X 字数限制的历史中提到的,表情符号的处理方式正是字数计算复杂性的缩影。

短信与表情符号的意外关系

短信 (SMS) 只要加入一个表情符号,字数限制就会发生巨大变化。

条件每条短信的字数编码方式
仅英文数字160 字GSM-7 (7 位)
仅中日文70 字UCS-2 (16 位)
包含表情符号70 字切换为 UCS-2

英文短信每条可以发 160 字,但只要加入一个表情符号,就会切换到 UCS-2 编码,变成只能发 70 字。仅仅一个表情,就损失了 90 字的容量。

表情符号的数量还在不断增加

年份Unicode 版本表情总数新增的主要表情
20106.0约 720基本的脸、动物、食物
20158.0约 1,620肤色变体
202013.0约 3,300忍者、珍珠奶茶、海狸
202416.0约 3,790坚果、指纹、泼溅

表情符号每年都在增加,截至 2024 年约有 3,790 种。最早的手机表情 (1999 年,NTT DoCoMo) 只有 176 种。25 年间增长了 20 倍以上。

编程中表情符号的字数

在编程中正确计算表情符号的字数,其实是一个非常棘手的问题。

编程语言"👨‍👩‍👧‍👦".length 的结果原因
JavaScript11UTF-16 代码单元数
Python7Unicode 码位数
Swift1字素簇数 (外观上的字数)

同一个表情符号,不同编程语言计算出的"长度"分别是 1、7、11,结果完全不同。作为字数和字节数区别的进阶问题,表情符号是最复杂的案例之一。

关于表情符号和 Unicode 的书籍,也可以在 Amazon 上找到

分享这篇文章