如何从原始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) // 👨👨👧👧