• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

从原始十六进制合成多字符表情符号

用户头像
it1352
帮助34

问题说明

我正在从服务器获得这样的JSON:

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

我应该把它翻译成它的复合字符,以便显示和/或复制到粘贴板:👨‍👨‍👧‍👧

目前为止的解决方案来自SO question

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错误,还是我做错了什么?

正确答案

#1

在您的操场上试试,看看有什么不同...

"👨👨👧👧".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代码,无基础,无Stroul

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) // 👨‍👨‍👧‍👧

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /reply/detail/tanecee
系列文章
更多 icon
同类精品
更多 icon
继续加载