Ios NSString到表情符号Unicode

Ios NSString到表情符号Unicode,ios,xcode,unicode,nsstring,emoji,Ios,Xcode,Unicode,Nsstring,Emoji,我试图从包含表情符号unicodes的后端提取一个JSON文件。这些不是传统的Unicode(示例:\ue415),而是跨平台工作的Unicode(示例:\U0001F604) 下面是json的一个示例: [ { "unicode": "U0001F601", "meaning": "Argh!" }, { "unicode": "U0001F602", "meaning": "Laughing so hard" } ] 我很难将这些字符串转换为Unicode,在应用程序中显示

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

下面是json的一个示例:

[
 {
 "unicode": "U0001F601",
 "meaning": "Argh!"
 },
 {
 "unicode": "U0001F602",
 "meaning": "Laughing so hard"
 }
]
我很难将这些字符串转换为Unicode,在应用程序中显示为表情符号


非常感谢您的帮助

要将这些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);
}];
//使用json序列化进行初始化(可能是NSJSONSerialization)
NSArray*jsonArray;
[jsonArray enumerateObjectsUsingBlock:^(id obj,整数idx,布尔*停止){
NSString*charCode=obj[@“unicode”];
//删除前缀“U”
charCode=[charCode substringFromIndex:1];
无符号unicodeInt=0;
//将unicode字符转换为int
[[NSScanner scannerWithString:charCode]scanHexInt:&unicodeInt];
//将此整数转换为字符数组(字节)
char-chars[4];
int len=4;

字符[0]=(unicodeInt>>24)和(1>16)以及(1>8)和(1)谢谢!这在过去几天里帮助我取得了进展。现在我遇到了另一个需要:使用U0001F601格式将其转换回字符串。我遇到了许多涉及\ue415格式的答案,但不是U0001F601格式。您是否也有一个方便的解决方案?您的&'是必需的。当右移位无符号数字时,右移位是一个逻辑(零填充)移位。在任何情况下,对8位字符类型的赋值都会截断该值。即使它们是必需的,它们都应该是“0xFF”(或者如果您真的更喜欢,”((1)