😀 - 这张脸是怎么传递的?

当你在微信上给朋友发送 😂 时,这个表情符号是如何到达对方手机的?是发送了一张图片吗?实际上并不是。表情符号是以"字符"的形式发送的。

表情符号是"字符"

表情符号和字母"A"或汉字"山"一样,都是"字符"。在计算机世界中,每个字符都被分配了一个编号。"A"是 65 号,"あ"是 12354 号,😀 (笑脸) 是 128512 号。

这套编号系统叫做 Unicode。Unicode 是一个国际标准,将全世界的文字统一在一个编号体系下管理,截至 2024 年已注册了约 15 万个字符。表情符号也是这个体系的一部分。

所以当你发送 😀 时,实际在网络上传输的只是数字"128512" (以 UTF-8 字节序列编码)。那个彩色的笑脸图案是接收设备在收到数字后绘制出来的。

为什么同一个表情符号在不同设备上看起来不一样

从 iPhone 发送的 🍕 (披萨) 在 Android 上可能会显示为略有不同的设计。这是因为 Unicode 只定义了编号和名称,"披萨表情 = U+1F355",而实际的设计由各平台自行决定。

  • Apple:写实的立体风格设计
  • Google:圆润的流行风格设计
  • Samsung:独特风格 (曾因与其他厂商差异过大而引发话题)
  • Microsoft:从扁平设计过渡到 3D 设计
  • X (原 Twitter):使用自有的 Twemoji 表情集

设计差异可能导致误解。有研究报告指出,同一个"微笑"表情在不同平台上给人的印象截然不同,"开心"、"讽刺"或"诡异"。

表情符号乱码 - 为什么会变成 □ 或 ?

有时你发送一个新的表情符号,在对方屏幕上却显示为 □ (豆腐块) 或 ?。这是一种字符编码失败的现象。

  • 操作系统过旧:每年都会新增表情符号,但旧版操作系统没有对应的字体
  • 不支持的字体:收到了编号,但设备没有该编号对应的设计
  • 编码不匹配:极少数情况下,字符编码转换可能导致编号偏移

□ 符号被称为"豆腐",因为它的方形看起来像一块豆腐。Google 的字体"Noto"名称来源于"No more tofu" (不再有豆腐块)。

新表情符号是如何添加的

新表情符号由非营利组织 Unicode 联盟每年审核并添加。任何人都可以提议新的表情符号,但必须通过严格的审核才能被采纳。

  • 提案必须包含"为什么需要这个表情符号"的证据
  • 必须证明现有表情符号无法替代
  • 代表特定公司或品牌的表情符号会被拒绝
  • 从提案到采纳通常需要约 2 年时间

2010 年表情符号首次在 Unicode 6.0 中正式标准化时,一次性添加了 722 个表情符号。它们最初在日本手机 (i-mode) 上使用,后来因被纳入 iPhone 的日语键盘而传播到全世界。"emoji"这个词本身就是日语。

总结

表情符号不是图片,而是"字符"。它们以 Unicode 编号的形式在网络上传输,由接收设备渲染出设计。这就是为什么不同平台上的设计不同,以及为什么在旧系统上会显示为 □。下次发送表情符号时,不妨想象一下它背后的数字正在经过 DNS 解析、TCP 连接和 TLS 加密到达对方。

相关术语

HTTPS 表情符号的编号也通过 HTTPS 加密传输。 DNS 连接即时通讯应用服务器的第一步。 加密 LINE 和 WhatsApp 通过端到端加密保护包括表情符号在内的消息。