获取表情符号字符的描述

dav*_*eme 13 string character emoji swift

每个表情符号都有一个描述,你可以在Mac OS的??Space特殊字符选择器中看到.这里列出了它们.有没有办法让我在代码中查询这个描述(没有将它们全部输入到Struct中)?

我想做点什么:

let : Character = ""
let desc: String = .description
Run Code Online (Sandbox Code Playgroud)

desc决心"SMILING FACE WITH OPEN MOUTH AND SMILING EYES".

Mar*_*n R 18

Core Foundation函数CFStringTransform()具有确定特殊字符的Unicode标准名称的转换.例:

let c : Character = ""

let cfstr = NSMutableString(string: String(c)) as CFMutableString
var range = CFRangeMake(0, CFStringGetLength(cfstr))
CFStringTransform(cfstr, &range, kCFStringTransformToUnicodeName, false)
print(cfstr)
Run Code Online (Sandbox Code Playgroud)

输出:

\N{SMILING FACE WITH OPEN MOUTH AND SMILING EYES}
Run Code Online (Sandbox Code Playgroud)

有关的更多信息, 请参见http://nshipster.com/cfstringtransform/CFStringTransform().


aya*_*aio 5

Martin R 使用Core Foundation 的答案CFStringTransform()仍然有效,但关键功能实际上来自于kCFStringTransformToUnicodeName,在Swift 2中我们可以像这样使用它,通过桥接NSString和调用stringByApplyingTransform:

let c: Character = ""
if let result = (String(c) as NSString)
    .stringByApplyingTransform(
        String(kCFStringTransformToUnicodeName),
        reverse: false) {
    print(result)
}
Run Code Online (Sandbox Code Playgroud)

\ N {与开口和微笑的眼睛微笑}

字符串相同:

let s: String = "This is a "
if let result = (s as NSString)
    .stringByApplyingTransform(
        String(kCFStringTransformToUnicodeName),
        reverse: false) {
    print(result)
}
Run Code Online (Sandbox Code Playgroud)

这是一个\ N {SMING FACE WITH OPEN MOUTH AND SMILING EYES}


Ima*_*tit 5

使用 Swift 5,您可以使用以下两种方式之一来获取 Emoji 字符的描述。


#1. usingUnicode.Scalar.Propertiesname属性

Unicode.Scalar.Properties有一个name属性。name有以下声明:

var name: String? { get }
Run Code Online (Sandbox Code Playgroud)

标量的已发布名称。

下面的 Playground 代码示例显示了如何使用name以获取 Unicode 标量的已发布名称:

let emoji: Character = ""
for scalar in emoji.unicodeScalars {
    print(scalar.properties.name)
}

/*
 prints: Optional("SMILING FACE WITH OPEN MOUTH AND SMILING EYES")
 */
Run Code Online (Sandbox Code Playgroud)

#2. usingUnicode.Scalar.PropertiesnameAlias属性

Unicode.Scalar.Properties还有一个nameAlias使用以下声明调用的属性:

var nameAlias: String? { get }
Run Code Online (Sandbox Code Playgroud)

标量的规范形式别名。[...]nameAlias如果名称被错误地发布,则提供该财产以进行更正。例如,U+FE18 的名称是“PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET”(注意“BRACKET”拼写错误)。nameAlias然后该属性包含更正后的名称。

下面的 Playground 示例代码显示了U+FE18 Unicode 标量之间name和之间的区别nameAlias

let emoji: Character = "\u{FE18}" // ?
for scalar in emoji.unicodeScalars {
    print(scalar.properties.name)
}
/*
 prints:
 Optional("PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET")
 */
Run Code Online (Sandbox Code Playgroud)
let emoji: Character = "\u{FE18}" // ?
for scalar in emoji.unicodeScalars {
    print(scalar.properties.nameAlias)
}
/*
 prints:
 Optional("PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRACKET")
 */
Run Code Online (Sandbox Code Playgroud)