将 Unicode 字符串显示为表情符号

Display Unicode String as Emoji

我目前在负载中接收以下格式的表情符号:

\U0001F6A3\U0000200D\U00002640\U0000FE0F

代表“‍♀️”

但是,如果我尝试显示它,它只会显示上面的字符串(少 1 转义),而不是表情符号,例如

NSString *emoji = payload[@"emoji"];
NSLog(@"%@", emoji) then displays as \U0001F6A3\U0000200D\U00002640\U0000FE0F

好像unicode转义不被识别。如何让上面的字符串显示为表情符号?

请假设无法更改从服务器接收数据的格式。

更新

我找到了另一种方法,但我认为下面发布的 Albert 的答案更好。我发布这个只是为了完整性和参考:

NSArray *emojiArray = [unicodeString componentsSeparatedByString:@"\U"];
NSString *transformedString = @"";

for (NSInteger i = 0; i < [emojiArray count]; i++) {

    NSString *code = emojiArray[i];
    if ([code length] == 0) continue;
    NSScanner *hexScan = [NSScanner scannerWithString:code];
    unsigned int hexNum;
    [hexScan scanHexInt:&hexNum];
    UTF32Char inputChar = hexNum;
    NSString *res = [[NSString alloc] initWithBytes:&inputChar length:4 encoding:NSUTF32LittleEndianStringEncoding];
    transformedString = [transformedString stringByAppendingString:res];
}

我对此进行了调查,看来您可能没有收到您所说的。如果你在你的 NSLog 中看到 \U0001F6A3\U0000200D\U00002640\U0000FE0F,那么你很可能实际上收到了 \U0001F6A3\U0000200D\U00002640\U0000FE0F。我尝试使用变量

NSString *toDecode = @"\U0001F6A3\U0000200D\U00002640\U0000FE0F";
self.tv.text = toDecode;

并且在 textview 中它可以很好地显示表情符号。

所以你必须先修复它,然后它才能正常显示。

删除多余的反斜杠,然后使用反向字符串转换进行转换 stringByApplyingTransform。转换必须对表情符号使用键 "Any-Hex"。

NSString *payloadString = @"\U0001F6A3\U0000200D\U00002640\U0000FE0F";
NSString *unescapedPayloadString = [payloadString stringByReplacingOccurrencesOfString:@"\\" withString:@"\"];
NSString *transformedString = [unescapedPayloadString stringByApplyingTransform:@"Any-Hex" reverse:YES];

NSLog(@"%@", transformedString);//logs "‍♀️"