解码带有表情符号字符的字符串,例如\ ud83d

时间:2016-11-14 20:45:18

标签: objective-c

我有以下字符串,我想用一个表情符号和新行在UILabel中正确显示它。我也想用drawInRect方法绘制它。如何正确转换/编码/解码?

此字符串将在运行时更改,因此应显示任何unicode字符/表情符号或特殊字符,例如\ n或&

对不起,我不知道用这个问题的正确用语。这让我很难在网上找到答案。我对这个主题的了解非常少。

  

\ ud83d \ ude02 \ ud83d \ ude02 \ ud83d \ ude02 \ ud83d \ ude02 \ ud83d \ ude02 \ ud83d \ ude05 \ ud83d \ ude06   \ u0db8 \ u0da0 \ u0d82   \ u0d91 \ u0d9a \ u0dca \ u0d9a \ n#set_with_machan \ nkunuharapa na \ n#关注   @lankan_machan \ nhttps://www.instagram.com/lankan_machan

编码后,文本应该与emojis,unicode characters&新线。 enter image description here

1 个答案:

答案 0 :(得分:1)

我能找到一个解决方案并编辑了一下。这个un完全逃脱了unicode角色并正确显示它们。也显示新行。感谢@DanZimm的帮助。

- (NSString*) unescapeUnicodeString2:(NSString*)string
{
    NSString* esc1 = [string stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];
    NSString* esc2 = [esc1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    NSString* quoted = [[@"\"" stringByAppendingString:esc2] stringByAppendingString:@"\""];
    NSData* data = [quoted dataUsingEncoding:NSUTF8StringEncoding];

    NSString* unesc = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:NULL error:NULL];
    assert([unesc isKindOfClass:[NSString class]]);
    return unesc;
}

找到解决方案here我必须编辑它,因为其中一个方法已被弃用。