2016-03-25 64 views
1

即使在@ user3441734 solved most of my problems之後,有一些表情符號在從[String:String]轉換爲String時似乎無法正確呈現。頑固的表情符號不會組合:❤

下面是一些遊樂場準備代碼來說明這個問題:

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在這些combo-emoji上會有不同的行爲,所以只有鏈接的圖像才能保證以我看到的方式呈現給您。
  • 這些表情符號都是膚色效果圖或同性戀情感的令牌。系統中是否存在某種奇怪的潛在種族主義&同性戀恐懼症?! (提示陰謀論。)
  • 請注意,我嘗試使用零寬度連接器u{200d}沒有幫助。

所以,蘋果的問題& Chrome對某些表情符號的處理,還是還有另一個我錯過的標準的特質?

回答

3

沒有陰謀,錯誤在你的代碼中。

U+1F468U+200DU+2764U+FE0FU+200DU+1F48BU+200DU+1F468

注意ZERO WIDTH JOINER(U+200D)各字符之間,並且變化SELECTOR-16選擇:

  • 第一個字符可以用來生產(U+FE0F)放在HEAVY BLACK HEART(U+2764)上,以確保使用表情符號表現形式。

    有關已實施的多人分組的完整列表,請參閱this table

  • U+1F3C7 HORSE RACING不是一個表情符號修飾符的基礎,因此它不支持膚色修飾符。

+0

啊哈!這就解釋了在全部JSON中的差別,例如,「unicode」:「1f468-2764-1f468」*和*'「unicode_alternates」:「1f468-200d-2764-fe0f-200d-1f468」'。後者包括木匠和選擇器代碼! – clozach