Emoji 相关工具合集
Emoji 工具合集:整理常用 emoji 的名称、Unicode 码点与含义分类,说明肤色修饰符、ZWJ 组合序列与地区旗帜的码位构成,并给出跨平台显示不一致的根因与数据库字段长度陷阱,附 emoji 挑选器、Unicode 转义与字符统计入口。适合在文案与代码中正确使用 emoji。
Emoji 已成为界面与文案中的常规元素,但它的 Unicode 结构远比看起来复杂。
常见方案对照
| 维度 | 基础 emoji | ZWJ 组合序列 |
|---|---|---|
| 占码位数 | 通常 1–2 个 | 3–11 个 |
| 视觉数量 | 1 个 | 1 个 |
| 可拆开搜索 | 可 | 不可 |
| 复制到旧系统 | 一般可用 | 可能显示为多个字符或方框 |
| 数据库字段长度 | 按字符数即可 | 需按码位预留,否则被截断 |
| 正则匹配 | 按码位匹配 | 需整体匹配或用变长匹配 |
| 平台差异 | 字体不同形状不同 | 字体不支持时降级显示 |
| 典型例子 | 点赞手势 U+1F44D | 家庭组合 = 3 码位 + 2 个 ZWJ |
边界条件
- ZWJ 序列的长度不能用普通 str.length 判断,数据库字段要按码位预留空间。
- 肤色修饰符(U+1F3FB–U+1F3FF)叠加在基础 emoji 上,部分旧系统显示为方框。
- 地区旗帜由两个「区域指示符」码位(U+1F1E6–U+1F1FF)合成,不是单一码位。
- 同一个 emoji 可能有多个码位序列(单码位、带变体选择符 U+FE0F),视觉相同但字符串不相等。
常见坑
- 按 str.length 截断字符串,把一个家庭 emoji 切成了两半。
- 数据库 varchar(10) 存组合序列,插入时被静默截断。
- 在不支持 ZWJ 的平台发家庭 emoji,对方看到一串无关字符。
- 比较两个 emoji 字符串是否相等时忽略变体选择符,导致误判为不同。
相关工具
- Emoji 选择器按分类浏览并复制 emoji,支持关键字搜索、肤色切换与多选批量复制。按表情分类浏览,支持关键字搜索、肤色变体切换与多选批量复制。每个表情显示名称与码点,方便在代码或文档中引用。适合社交文案、聊天应用与设计稿标注时插入表情。部分表情在旧系统会显示为方块,属字体支持问题。可按分类检索并多选复制。
- 文本转 Unicode在文本与 Unicode 转义序列间互转,支持 BMP 与代理对并显示码点,适合排查隐藏控制符、还原被转义的 emoji 与多语言文案。能列出每个字符的十进制与十六进制码点,基本平面之外的内容会显示为代理对。适合排查零宽字符、不可见控制符与源码里的转义残留。转义序列可整段还原。非基本平面字符会拆成代理对。
- Unicode 转义转换器在文本与 Unicode 转义序列之间双向转换,支持 ES6 大括号格式与代理对,可正确处理 emoji,便于调试 JS 字符串转义。支持四位十六进制与带大括号的扩展写法,非基本平面字符会拆成代理对。源码里出现乱码时可反向还原成可读文字。转义结果可整段复制。可还原源码里被转义的文本。
- 文本统计实时统计字符数、单词数、行数、字节数与预估阅读时间,支持中英文混合计数。同时给出字符数、单词数、行数,以及 UTF-8 与 GBK 两种编码下的字节数,中文在其中占用不同。区分可见字符与空白字符,并估算阅读或朗读所需时间。适合核对接口字段长度上限与数据库字段约束。所有指标随输入实时更新。
常见问题
为什么同一个 emoji 在不同平台显示不一样?
因为字体不同。每个平台(Windows / macOS / iOS / Android)自带不同的 emoji 字体,同一码位渲染出的图形可以完全不同。想要跨平台一致,只能用**图像**(图标或图片)而非 emoji 字符。另外肤色修饰符叠加在基础 emoji 上,在部分旧系统上会显示成方框。
ZWJ 序列是什么,为什么它会影响字符串长度?
ZWJ(Zero Width Joiner,U+200D)用来把多个码位**组合成一个** emoji。例如家庭类 emoji 用 ZWJ 把「男人 + 女人 + 女孩」连起来,整体显示为一个人物。因此它的**字符串长度大于视觉长度**——一个看起来 1 个字符的 emoji 可能占 7 个码位。做长度校验、截断或数据库字段长度限制时必须按码位计算。