所有 Unicode 表情符号 ZWJ 序列都有效吗?

Ale*_*der 11 unicode fonts codepoint emoji

创建表情符号字体时,任何顺序都ZERO WIDTH JOINER有效吗?

\n\n

例如:我可以用\xe2\x80\x8d\xe2\x98\x85\xe2\x80\x8d( Waving White Flag+ zwj+ Black Star+ zwj+ Green Square) 来代表一面带有绿色星星的白旗吗?然后渲染它,比如世界语旗帜

\n

Cha*_*uff 7

对于什么可以成为 ZWJ 序列的一部分以及什么不能成为 ZWJ 序列的一部分,存在一些限制。Unicode 技术标准 #51规定了这些规则。

\n\n

根据定义ED-15a,一个格式良好的 ZWJ 序列只能包含:

\n\n
    \n
  • Emoji 字符(具有 属性的字符Emoji=True
  • \n
  • 表情符号呈现序列(表情符号字符后跟 U+FE0F VARIATION SELECTOR-16,此数据文件中列出了其所有有效组合)
  • \n
  • 表情符号修饰符序列(具有 属性的字符Emoji_Modifier_Base=True后跟具有 属性的字符Emoji_Modifier=True
  • \n
\n\n

所有相关属性都可以在此数据文件中找到。

\n\n

U+2605 BLACK STAR 不是表情符号字符(而且它显然也不是这些类型的序列之一),因此截至撰写本文时它在 ZWJ 序列中使用无效,但您可以替换 U+2B50白色中星(这是一个表情符号)。除此之外,\xef\xb8\x8f 和 都是公平的游戏。

\n\n

关于 U+1F3F3 WAVING WHITE FLAG 的旁注:该字符是一个表情符号,但它具有属性Emoji_Presentation=False,这意味着它默认显示为文本样式(单色而不是彩色)。要强制显示表情符号样式,必须附加 U+FE0F VARIATION SELECTOR-16。建议对于字符 where 始终包含这些变体选择器Emoji_Presentation=False

\n\n

U+2B50 WHITE MEDIUM STAR 也是此类表情符号呈现序列的有效基础,但Emoji_Presentation=True默认情况下是这样,因此变体选择器完全是可选的。同时,U+1F7E9 LARGE GREEN SQUARE 不是表情符号呈现序列的有效基础,因此绝不能跟在 VARIATION SELECTOR-16 之后。我知道,它\xe2\x80\x99s很复杂。

\n\n

这一切意味着您对于要使用的精确代码点序列有两种选择,这两种选择同样有效。任何一个:

\n\n

\xef\xb8\x8f\xe2\x80\x8d\xe2\xad\x90\xe2\x80\x8d<U+1F3F3, U+FE0F, U+200D, U+2B50, U+200D, U+1F7E9>

\n\n

或者:

\n\n

\xef\xb8\x8f\xe2\x80\x8d\xe2\xad\x90\xef\xb8\x8f\xe2\x80\x8d<U+1F3F3, U+FE0F, U+200D, U+2B50, U+FE0F, U+200D, U+1F7E9>

\n