顽固的表情符号不会合并:❤

时间:2016-03-25 23:07:26

标签: ios unicode swift2 emoji

即使在@ user3441734 solved most of my problems之后,也有一些表情符号在从[String:String]转换为String时似乎无法正确呈现。

这里有一些Playground准备好的代码来说明问题:

var u = ""
u = "1f468-1f468-1f467-1f467" // ‍‍‍
//u = "1f918-1f3ff" // 
//u = "1f468-2764-1f48b-1f468" // ‍❤‍‍ (broken)
//u = "1f3c7-1f3fb" // ‍ (broken)

let unicodeArray = u.characters.split("-")
    .map(String.init)
    .map {String(UnicodeScalar(Int($0,radix: 16) ?? 0))}

if let last = unicodeArray.last {
    let separator: String
    switch (unicodeArray.first, last) {
        // Failed attempt to get tone applied to jockey
    case let (horse_racing, _) where horse_racing == "\u{1f3c7}":
        separator = "\u{200d}"
    case let (_, tone) where "\u{1f3fb}"..."\u{1f3ff}" ~= tone:
        separator = ""
    case let (_, regionalIndicatorSymbol) where "\u{1f1e6}"..."\u{1f1ff}" ~= regionalIndicatorSymbol:
        separator = ""
    default:
        separator = "\u{200d}"
    }
    print(unicodeArray.joinWithSeparator(separator))
}

依次取消对u的每个作业的注释,以查看问题的实际效果。第3和第4个值应该像这样渲染:

  

Man-kiss-man

  

Short-and-white

...思想

  • 事实证明,对赛马的长按不能在iOS上显示肤色,所以让我们假设这只是一种疏忽,可能与判断标准表情符号尺寸的骑师肤色几乎不可能有关。我仍然无法用u = "1f468-2764-1f48b-1f468"
  • 找出问题
  • 道歉,如果这个问题一目了然都不清楚。 Chrome和Safari在这些组合表情符号中有不同的行为,所以只有链接的图像才能保证以我在我看来的方式显示给你。
  • 这些表情符号都是肤色效果图或同性感情的代币。是否有某种奇怪的潜在种族主义和同性恋恐惧症潜伏在系统中?! (提示阴谋论。)
  • 请注意,我尝试使用零宽度木工u{200d}没有帮助。

所以,Apple& Chrome对某些表情符号的处理,还是我错过了标准的另一个特质?

1 个答案:

答案 0 :(得分:3)

没有阴谋,你的代码中存在错误。

  • 第一个字符可以用:

    制作

    U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468

    注意每个角色之间的ZERO WIDTH JOINER(U+200D)和HEAVY BLACK HEART(U+FE0F)上的VARIATION SELECTOR-16选择器(U+2764)以确保表情符号演示使用了风格。

    有关已实施的多人分组的完整列表,请参阅this table

  • U+1F3C7 HORSE RACING不是表情符号修饰符基础,因此它不支持肤色修饰符。