Twemoji

关注
义项:Twitter 开源的表情符号库
Twemoji

Twemoji 是由 Twitter 发起并开源的一套 Unicode 表情符号图形库, 包含矢量与位图两套资源以及一个用于网页渲染的 JavaScript 库[1][2]。它的设计风格扁平、配色简单, 不随操作系统或设备变化, 因此在跨平台显示不一致时被广泛当作统一的表情符号方案; 其代码与图形分别以开源许可发布, 被多处第三方应用、浏览器与网站采用[1][2]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Twemoji 指 Twitter 面向公众开源的一套表情符号资源集合, 由两部分组成: 一部分是覆盖 Unicode 推荐通用交换 (RGI) 表情符号的图形文件, 提供 72×72 像素的 PNG 位图以及 SVG 矢量两种形式; 另一部分是名为 twemoji 的 JavaScript 库, 用于在网页中把文本形式的 Unicode 表情字符替换为对应的图片[2][3]。

它的定位是让同一条 Unicode 表情字符在不同平台、不同浏览器上呈现为同一套画面, 从而避免各厂商原生字体设计差异造成的跨平台沟通偏差[1][3]。该集合不包含平台自定义表情, 只处理 Unicode 标准定义的表情符号[2]。

原理

Unicode 为每个表情符号分配了一个或多个码点, 例如 U+1F600 表示笑脸。Twemoji 的图形文件以码点的十六进制小写形式命名, 单码点直接用码点编号, 由多个码点组成的序列则以连字符连接, 例如美国国旗写作两个区域指示符码点相连的形式[4]。渲染时只要把文本中的表情字符还原成码点字符串, 再拼接到资源地址上即可取到对应图片[4]。

库的核心接口是 twemoji.parse, 分 DOM 解析与字符串解析两种模式。DOM 解析以页面元素为输入, 只替换文本节点内的表情, 生成 img 标签而不改动周边节点与事件监听, 并且不使用 innerHTML, 因此被官方推荐为安全性更高的方式, 代价是需要额外执行 DOM 操作[2]。字符串解析则直接在字符串上做替换, 官方明确指出它不会对内容做净化, 存在执行恶意代码的风险, 因而不建议使用[2]。

调用时可以传入选项对象来定制行为: callback 用于自定义图片地址生成逻辑, base 指定资源基础地址, ext 指定扩展名, size 指定尺寸目录, className 指定生成图片的样式类, folder 则用于改用 SVG 目录而不按固定尺寸取图[2]。库还提供 twemoji.convert.toCodePoint 与 twemoji.convert.fromCodePoint 两个工具方法, 在十六进制码点与 JavaScript 的 UTF-16 代理对之间互相转换[2]。要让表情跟随正文大小, 通常给 img.emoji 设置宽高为 1em 并调整垂直对齐[2]。

发展历程

Twitter 的自定义表情集于 2014 年 11 月公开发布, 首发版本包含 874 个表情, 由 Twitter 拥有并托管在 GitHub 上, 设计工作与 Iconfactory 合作完成, 风格为二维扁平、纯色无渐变无光泽[1]。此次开源是 Twitter 与内容分发网络服务商 MaxCDN 以及 WordPress 三方合作的一部分, 目的是让任何支持网页视图的设备与浏览器都能显示统一表情[5]。

2015 年底的 Twemoji 2.0 一次性增加 787 个字符, 对应 Unicode 7.0 与 8.0, 国旗类表情从 10 个扩展到 257 个, 覆盖 ISO 3166-1 标准中的各国家与地区, 同时开始支持肤色修饰符与零宽连接符序列, 默认人物表情采用橙发造型, 这一处理与 Apple、Microsoft 的选择不同[1]。

2017 年 5 月的 Twemoji 2.3 支持 Emoji 5.0 新增字符, 使 Twitter 成为较早跟进的厂商之一; 2018 年初的 2.5 没有新增字符, 只调整了部分图形[1]。2018 年 4 月的 2.6 把原本的手枪表情改为水枪, 与 Apple、Samsung 等厂商的做法一致, 这一改动引发争议; 同年 5 月的 2.7 又对多个表情做设计趋同调整[1]。

2018 年 6 月起, Twemoji 的版本号改为与 Unicode 版本同步, 2.7 之后直接跳到 11.0, 该版本加入 Unicode 11.0 的 156 个新表情[1]。同年 5 月, Twitter 在 Android 客户端改用 Twemoji 渲染, 此前该平台显示的是设备厂商自带的表情设计, 苹果设备则一直沿用 Apple 风格表情[1]。

2023 年 6 月发布的 Twemoji 15.0 是最后一次跟随 Unicode 发布的主要更新, 加入 Emoji 15.0 的 31 个字符[1]。此后平台上只剩个别图形微调, 包括 2024 年 7 月把手枪表情改回手枪造型并引发新一轮讨论, 以及 2024 年 8 月对该表情的再次调整[1]。2023 年 2 月起, 移动端不再使用 Twemoji 渲染, 改回设备原生表情; 2024 年 1 月起专门的 Twemoji 网站停止运营, 只能通过互联网存档访问[1]。

应用

Twemoji 以两种方式被外部使用: 一是直接取用图形资源, 作为网站、应用或文档中的表情图片; 二是引入 JavaScript 库, 在运行时把页面文本里的表情替换为统一图形[2]。官方推荐的部署方式包括通过包管理器安装, 或从内容分发网络直接引用构建好的脚本文件[2]。

开源许可使该图形集在 Twitter 之外广泛扩散, 采用者包括 Discord、Roblox, 以及 Windows 版 Firefox 中用于显示国旗类表情的场景, 也出现在印刷品与视频广告中[1]。Discord 于 2023 年 12 月采用 Twemoji 设计, 并在 2025 年 4 月的更新中支持 Emoji 16.0 的全部字符[1]。

围绕该库还出现了大量社区项目, 提供便捷的 CSS 类用法, 或把渲染能力移植到 Ruby、PHP、.NET、JavaFX、LaTeX 等语言与框架中, 也有项目把 Twemoji 制作为 Linux 与 macOS 上可用的系统彩色字体[2]。自 2022 年 10 月起, 一个由前 Twemoji 设计师维护的独立开源项目继续推进该图形集的开发, 并有 Discord 的设计人员参与贡献[1]。

局限

Twemoji 只覆盖 Unicode 定义为推荐通用交换的表情符号, 不支持平台自定义表情, 也不处理各家平台私有的表情扩展[2]。当 Unicode 发布新一批表情而图形集尚未跟进时, 这些字符无法以 Twemoji 形式呈现, 只能回退到设备或系统自带字体[4]。

官方的字符串解析模式不对输入做净化, 官方文档明确提示该方式无法阻止恶意代码被执行, 并要求该场景的安全处理不在项目职责范围内[2]。DOM 解析虽然被视为更安全的选项, 但其依赖的 DOM 操作本身开销较大, 会带来一定性能损失[2]。

以图片替换字符的渲染方式还带来额外约束: 文档字符集需设置为 UTF-8, 否则表情无法正确解析; 图片尺寸与行内基线也需要额外样式调整才能与正文协调[2]。此外, 图形与代码采用不同的开源许可, 使用图形时需按许可要求进行署名, 项目方接受在说明文档、关于页面或源码中提及的形式[2]。

参见

  • Unicode —— Twemoji 所依据的字符编码标准, 决定其图形覆盖范围

  • 表情符号 —— Twemoji 所要呈现的内容对象

  • Twitter —— 发起并开源 Twemoji 的公司

  • GitHub —— Twemoji 源码与图形资源的托管平台

  • 内容分发网络 —— Twemoji 对外提供图形资源所依赖的基础设施

参考资料

  1. A Timeline of Twemoji: 2014 [引用日期2026-10-14]
  2. @twemoji/api [引用日期2026-10-14]
  3. twemoji [引用日期2026-10-14]
  4. emoji [引用日期2026-10-14]
  5. Re: Open Source Emoji for the Web [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T20:48:18Z

历史版本

本条目引用的词条
Unicode 表情符号 Twitter GitHub 内容分发网络