NSString到表情符号Unicode

时间:2014-07-09 19:34:04

标签: ios xcode unicode nsstring emoji

我正在尝试从包含表情符号的unicodes的后端提取JSON文件。这些不是传统的unicodes(例如:\ ue415),而是跨平台工作的unicodes(例如:\ U0001F604)。

以下是json的一个示例片段:

[
 {
 "unicode": "U0001F601",
 "meaning": "Argh!"
 },
 {
 "unicode": "U0001F602",
 "meaning": "Laughing so hard"
 }
]

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

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

获取字节后,很容易用字节初始化NSString。下面的代码完全符合您的要求。它假定jsonArray是你的json被拉出来的NSArray

// 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);
}];

答案 1 :(得分:0)

// String to unicode

如果let data = NormalString.data(using:String.Encoding.nonLossyASCII),let convertedString = String.init(data:data,encoding:String.Encoding.utf8){return convertedString}

// Unicode to string

如果let data = UnicodeString.data(using:String.Encoding.utf8),let convertedString = String.init(data:data,encoding:String.Encoding.nonLossyASCII){return convertedString}