DG EMOJIK / 中文

复合表情符号与ZWJ:如何将多个字符组合成一个图形?

一个可见的表情符号可以由多个Unicode字符组成。ZWJ,即零宽连接符,位于某些表情符号序列的元素之间,并允许组合显示。如果接收系统不支持该序列,则可能会显示为独立的图形。

匈牙利语原文的完整机器翻译。

堆叠在一起的拼图块特写。
插图。 · congerdesign / Pixabay

因此,对于程序来说,单个图形可能比一个字母更长。在复制、删除和字符限制方面,这具有实际意义。让我们通过三个具体示例来看看哪些元素需要保持在一起。

让我们看看技术人员

👩‍💻序列由女性、连接符和笔记本电脑字符组成。ZWJ的码点是U+200D;它本身不是可见的书写符号。支持的序列可以由渲染器绘制为单个形状。然而,在任意字符之间插入ZWJ并不会自动创建一个新的、到处都能工作的表情符号。来源:Unicode Emoji – Emoji ZWJ Sequences

可见示例 码点顺序 序列的组成部分
👩‍💻 U+1F469, U+200D, U+1F4BB 女性,连接符,笔记本电脑。
👨‍🍳 U+1F468, U+200D, U+1F373 男性,连接符,表示烹饪的字符。
👩🏽‍💻 U+1F469, U+1F3FD, U+200D, U+1F4BB 女性,肤色修饰符,连接符,笔记本电脑。

在第三行中,肤色修饰符位于女性字符之后。它执行的任务与连接符不同。例如,👋🏽挥手的手包含肤色,但没有ZWJ:仅选择肤色本身不会使符号成为ZWJ序列。国家旗帜的字母对也由多个元素组成,但遵循不同的连接规则。

“一个字符”意味着什么?

阅读时,你可能会将程序存储为多个码点的内容感知为一个图形。Unicode文本分割规则也处理这些由用户感知为单个单位的组。技术术语是字素簇。来源:Unicode Text Segmentation

因此,在检查输入字段的长度限制时,请提出三个不同的问题:有多少可见单元,它们由多少码点组成,以及程序计算哪些单元?如果界面计算的内容与读者预期的不同,“最多十个字符”的标签提供的信息很少。

在空白笔记中尝试:粘贴👩🏽‍💻图形,然后删除。它是一次性消失,还是留下一个人、一台笔记本电脑或一个肤色符号?你可以从中看到编辑器的行为。缩短重要文本时,也要检查保留的部分。

为什么复制时可能会散开?

两个检查方向很有用。一个是显示:相同的完整序列在另一个程序中是否也显示为多个图像?另一个是数据:在复制和保存过程中,序列的元素是否保留?这两种情况外表可能相似,但需要不同的修复。

首先将完整符号复制到空白笔记中,然后再复制回来。之后,也尝试一个简单的笑脸。如果只有复合形状发生变化,请在错误报告中提供具体的序列和两个应用程序的名称。屏幕截图显示视觉效果,而粘贴的文本则允许检查原始字符。

复制和缩短时保持完整

不要在图形看不见的中间切断文本。编辑时,选中整个表情符号,并查看缩短后的版本。制作程序时,最好选择处理用户感知字符边界的文本处理,然后用具体的复合符号进行测试。

发布前的测试应简单:将基本笑脸、肤色手和ZWJ序列放入测试文本中。检查保存、重新加载和删除。关于显示为方框的表情符号和短信字符限制的指南详细说明了这两个相关的调试情况。

带走要点

三道题的知识测验

尝试应用你读到的内容。每个问题选择一个答案;每个正确答案得一分。评估将针对这三种情况提供反馈,我们不会存储或发送你的答案。

1. 表单将👩‍💻符号计为三个码点,而你看到一个图形。哪个结论是合理的?
2. 在展示的序列中,ZWJ的作用是什么?
3. 复制后图形散开。哪个错误报告更有用?

解答和解释
  1. 程序计算的单位与可见图形的数量不同。 女性、ZWJ和笔记本电脑这三个码点可以共同构成一个可见图形。
  2. 在需要共同显示的元素之间使用不可见连接符。 连接符是序列的一部分,要显示组合图形还需要渲染支持。
  3. 可复制的序列、视觉效果以及受影响的应用程序名称。 数据和渲染方式共同有助于确定表情符号在何处发生了变化。

统计你的正确答案:每个得一分。未回答得零分。

  • 3分: 在这三种情况下,你分别处理了图形和存储的序列;请在笔记中尝试复制和删除。
  • 2分: 检查遗漏了哪个组件或调试数据。
  • 0–1分: 从分解技术细节开始:女性、ZWJ和笔记本电脑。

还有一篇不错的文章

全部 20 篇文章 · 寻找表情符号