• 2022年2月7日更新:经热心网友指正,不是安卓系统不支持复合emoji,而是聊天软件没有做适配。

之前和朋友聊天的时候发现了个神奇的表情:

😮‍💨

就是它!

这个表情在苹果生态下显示为

(哎)

而在安卓和win生态下显示为类似这个:

(这个真的超级好看)

今天突然想起来,想用python来算一下这个😮‍💨的长度,有了神奇的发现:

当我把这个表情输入到终端的时候它变成了“?\U+200D?”,很显然这个表情由3个Unicode字符组合而成。中间这个“\U+200D”应该就是连接符。

emojipedia.org上搜索不难发现这是个叫做“零宽连接符”的字符

机翻

零宽度连接器(ZWJ)是一个Unicode字符,它按顺序将两个或多个其他字符连接在一起以创建新的表情符号。
零宽度细木工,发音为“zwidge”,不是一个表情符号,本身没有外观。单独使用时,这是一个看不见的字符。
查看使用此字符的表情符号ZWJ序列
零宽度加入器于1993年被批准为Unicode 1.1的一部分,并于2018年添加到表情符号11.0中。

那为什么安卓平台上显示不出正确的表情呢?继续在网上搜索

引用自搜狐(侵删)

“无缝连接ZWJ”与复合表情
标准码协会致力于解决语言表述方面的问题,比如2014年开始2015年广泛应用的多肤色人种的表情,今年的更新就侧重于所有的职业表情中男女形象均有。我们必须承认,在安排表情开发发布的优先集上,统一码协会做的无比正确。

通常,每一个emoji表情都是由特定的字符来展现的,新创造一个emoji表情意味着要新建一个符号来与之关联。以肤色和性别为例,标准码协会提出更多创造性的解决方案,比如选择将多个代码结合在一起来创建一个新表情。
不同性别的表情所代表的职业如何来展现的呢?以一个标准的“男性”或是“女性”表情再添加个代表职业的表情,就能展现“男性”某职业或女性某职业这样一个表情,而不是两个表情。这种特殊不可见的排列方式被称为“无缝连接”(“Zero-width joiner,即ZWJ”)。新的iOS 10、安卓牛轧糖(Android Nougat)平台支持这种组合表情,看到ZWJ就知道显示一个表情而不是分离的两个。

对于扩充现有emoji表情数量并保持代码量可控来讲,以不同序列组合的方式创建emoji表情的方式是极为聪明的,比前几年更形象且更具代表性。例如,在ZWJ序列下,诸如“吻”、“爱”和“家庭”符号有很多种组合。在Unicode 6.0版本中,只有一个emoji表情代表家庭,现在却有很多。

标准码协会利用ZWJ字符序列的方式(可以跨多平台使用),使得各IT公司可以轻易地进行开发,不过同时也有个明显的问题。Emoji表情和ZWJ字符串不需要标准码协会批准就可以建立并在自有平台上使用。即使在不支持ZWJ的老版本中,最多也是显示两个或是两个以上独立的表情,添加新的代码不会破坏其他或是出现丑陋的问号块。
不需要耗一个月甚至一年的时间等候审批,可以使表情开发变得更快,苹果或是谷歌可以自主添加标志或解决问题,而不会影响与其他平台的兼容。另一方面,这也使以ZWJ序列排列出的表现被跨平台支持,但事实上却没能被支持。
“如果变得极端起来,那会导致不同平台间的符号不兼容”,Emojipedia创始人杰里米·比尔格(下简称比尔格)表示,“这将是个问题”。
我们已开始看到不同平台添加他们自己序列的ZWJ表情,但这并不能被标准码协会和其他平台支持。Twitter开发了海盗旗、Windows 10周年特号地则添加了一系列忍者猫,结果成为Windows内部的一个笑话,WhatsApp仅增加了可以展示在其他平台上的一个奥运五环标志。
正常情况下,老的序列都能显示特定的含义(如海盗旗),但往往潜在含义是非常模糊的(如奥运戒指、忍者猫)。在创造和使用其他人的emoji表情时,软件开发商往往只是凭自我约束。
“如果ZWJ任由意想不到的方式进行扩散,那我能预见厂商真正的困境”,比尔格表示,“特别是,例如WhatsApp引进的奥运戒指表情这样的序列,不遵循其他厂商使用公约,最糟糕的是如果使用一个受版权保护的图片的话,那其他平台都不能使用。”
我预计苹果、谷歌,其他厂商都会相对保守介绍推广自己特定平台利用ZWJ组合的表情符号,但长远来看,这会引起其他厂商跨平台不兼容引起的混乱。这就是标准码协会成立所极力避免的,不过即使没有ZWJ字符,也会一直存在的不一致的地方。

简而言之,为了在控制代码量的情况下扩充现有的emoji表情,ZWJ无缝连接出现了,但由于不受标准码的限制,各大公司的ZWJ表情出现了不统一的问题导致了“?‍?”这样特殊的现象。

这样的复合表情还有很多,故在使用的时候要注意平台间的兼容性以避免词不达意。

但是不管怎么说:这个😮‍💨真的好好看啊哈哈