如何从原始hex合成多字符表情符号

我从服务器上得到这样的JSON:

{ "unicode":"1f468-1f468-1f467-1f467" } 

我应该把它翻译成复合字符来显示和/或复制到粘贴板上:👨👨👧👧

迄今为止的解决scheme来自这个SO问题 :

 let u = json["unicode"] as? String let dashless = u.characters.split{$0 == "-"}.map(String.init) let charArray = dashless.map { char -> Character in let code = Int(strtoul(char, nil, 16)) return Character(UnicodeScalar(code)) } let unicode = String(charArray) UIPasteboard.generalPasteboard().string = unicode 

这对单字符表情符号定义很有用。

例如,我可以用这个JSON运行上面的代码…

 { "unicode":"1f4a9" } 

…并粘贴预期的结果:💩。 但是,当我使用前面列出的mmgg家庭表情符号时,我在iOS中得到以下内容:减去空格:👨👨👧👧。 当他们粘贴到文本字段时,他们似乎不想合并。

这是一个iOS错误,或者我做错了什么?

试试这个在你的操场上,看到不同…

 "👨👨👧👧".unicodeScalars.forEach { (c) in print(c.escape(asASCII: true),terminator: "") } print("") "👨‍👨‍👧‍👧".unicodeScalars.forEach { (c) in print(c.escape(asASCII: true), terminator: "") } /* \u{0001F468}\u{0001F468}\u{0001F467}\u{0001F467} \u{0001F468}\u{200D}\u{0001F468}\u{200D}\u{0001F467}\u{200D}\u{0001F467} */ 

你的原始的,稍作修改的代码

 import Darwin // stroul let u = "1f468-1f468-1f467-1f467" let dashless = u.characters.split{$0 == "-"}.map(String.init) let emoji = dashless.map { char -> String in let code = Int(strtoul(char, nil, 16)) return String(UnicodeScalar(code)) }.joinWithSeparator("\u{200D}") print(emoji) // 👨‍👨‍👧‍👧 

纯Swift代码,没有基础,没有strtoul

 let u = "1f468-1f468-1f467-1f467" let emoji = u.characters.split("-") .map {String(UnicodeScalar(Int(String($0),radix: 16) ?? 0))} .joinWithSeparator("\u{200D}") print(emoji) // 👨‍👨‍👧‍👧