一般斯威夫特是真的智能計數字形集羣作爲一個單一的字符。如果我想打一個黎巴嫩國旗,例如,我可以將兩者結合起來的Unicode字符爲什麼斯威夫特將這個字形集羣統計爲兩個字符而不是一個字符?
- U + 1F1F1區域指標符號字母L
- U + 1F1E7區域指標符號字母B
並預期這是斯威夫特一個字符:
let s = "\u{1f1f1}\u{1f1e7}"
assert(s.characters.count == 1)
assert(s.utf16.count == 4)
assert(s.utf8.count == 8)
但是,讓我們說我要讓菲茨帕特里克的Type-5的騎自行車的表情符號。如果我結合
- U + 1F6B4騎車
- U + 1F3FE EMOJI MODIFIER FITZPATRICK TYPE-5
斯威夫特計數,這種組合人物!
let s = "\u{1f6b4}\u{1f3fe}"
assert(s.characters.count == 2) // <----- WHY?
assert(s.utf16.count == 4)
assert(s.utf8.count == 8)
爲什麼這兩個字符而不是一個?
表明爲什麼我希望它是1,注意,這個集羣實際上是解釋爲一個有效的表情符號:答案
這看起來像一個錯誤報告。爲什麼不把它發送給Swift團隊? –
http://unicode.org/reports/tr51/有點含糊:「只要這些字符中的一個緊跟某些字符(例如WOMAN),那麼字體應該將該序列顯示爲單個字形...」 –
在https://bugs.swift.org/browse/SR-375有關於這一點的討論。不幸的是,這並不能說明情況。 – emrys57