NSString到Emoji Unicode

Jer*_*ero 2 unicode xcode nsstring ios emoji

我试图从包含表情符号Unicode的后端提取JSON文件。这些不是旧版Unicode(例如:\ ue415),而是跨平台工作的Unicode(例如:\ U0001F604)。

这是被提取的json示例:

[
 {
 "unicode": "U0001F601",
 "meaning": "Argh!"
 },
 {
 "unicode": "U0001F602",
 "meaning": "Laughing so hard"
 }
]
Run Code Online (Sandbox Code Playgroud)

我很难将这些字符串转换为将在应用程序中显示为表情符号的unicode。

任何帮助是极大的赞赏!

小智 5

为了将这些Unicode字符转换为NSString,您将需要获取这些Unicode字符的字节。

获取字节后,很容易用字节初始化NSString。下面的代码正是您想要的。它假设jsonArrayNSArray从您的json提取生成的。

// initialize using json serialization (possibly NSJSONSerialization)
NSArray *jsonArray; 

[jsonArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSString *charCode = obj[@"unicode"];

    // remove prefix 'U'
    charCode = [charCode substringFromIndex:1];

    unsigned unicodeInt = 0;

    //convert unicode character to int
    [[NSScanner scannerWithString:charCode] scanHexInt:&unicodeInt];


    //convert this integer to a char array (bytes)
    char chars[4];
    int len = 4;

    chars[0] = (unicodeInt >> 24) & (1 << 24) - 1;
    chars[1] = (unicodeInt >> 16) & (1 << 16) - 1;
    chars[2] = (unicodeInt >> 8) & (1 << 8) - 1;
    chars[3] = unicodeInt & (1 << 8) - 1;


    NSString *unicodeString = [[NSString alloc] initWithBytes:chars
                                                       length:len
                                                     encoding:NSUTF32StringEncoding];

    NSLog(@"%@ - %@", obj[@"meaning"], unicodeString);
}];
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这帮助我在最近几天取得了进展。现在,我遇到了另一个需求:使用U0001F601格式将其转换回字符串。我遇到了许多涉及\ ue415格式的答案,但没有涉及U0001F601格式。您是否也将有一种方便的解决方案呢? (2认同)