如何在UIlabel和UItextviews中显示表情符和特殊字符?

我试图显示一个string在各种各样的项目,如UIlabel,UItextview,Uitextfield等…..我想这样做,像这样

NSData *data1 = [title dataUsingEncoding:NSUTF8StringEncoding]; NSString *goodValue = [[NSString alloc] initWithData:data1 encoding:NSNonLossyASCIIStringEncoding]; label.text=goodvalue; 

这有时对我"Youtube\ud83d\ude27\ud83d\ude2e\ud83d\ude2f\ud83d" ,但有时它会返回null这样的string,如"Youtube\ud83d\ude27\ud83d\ude2e\ud83d\ude2f\ud83d" 。任何人都可以指导我呢?

表情符号字符在Unicode平面1中,因此需要多于16位来表示代码点。 因此两个UTF8表示或一个UTF32表示。 Unicode实际上是一个21位的系统,对于平面0字符(除了表情符号以外,基本上都是16位)就足够了,我们通过使用16位来获得。 表情符号需要超过16位。

"Youtube\ud83d\ude27\ud83d\ude2e\ud83d\ude2f\ud83d" 。 是无效的,它是utf16 unicode转义string的一部分,最后一个\ud83d是表情符号字符的1/2。

另外,为了用转义字符“\”创build一个文字string ,转义字符必须被转义:“\\”。

 NSString *emojiEscaped = @"Youtube\\ud83d\\ude27\\ud83d\\ude2e\\ud83d\\ude2f"; NSData *emojiData = [emojiEscaped dataUsingEncoding:NSUTF8StringEncoding]; NSString *emojiString = [[NSString alloc] initWithData:emojiData encoding:NSNonLossyASCIIStringEncoding]; NSLog(@"emojiString: %@", emojiString); 

NSLog输出:

emojiString:Youtube😧😮😯

表情符号string也可以用utf32表示:

 NSString *string = @"\U0001f627\U0001f62e\U0001f62f"; NSLog(@"string: %@", string); 

NSLog输出:

string1:😧😮😯

 NSString *str = @"Happy to help you \U0001F431"; NSData *data = [str dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSString *valueUnicode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSData *dataa = [valueUnicode dataUsingEncoding:NSUTF8StringEncoding]; NSString *valueEmoj = [[NSString alloc] initWithData:dataa encoding:NSNonLossyASCIIStringEncoding]; _lbl.text = valueEmoj;