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

时间:2014-05-28 11:03:31

标签: ios uilabel uitextview emoji

我正在尝试在各种项目中显示一个字符串,例如UIlabel,UItextview,Uitextfield等......我试图以这样的方式做这样的事情

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

这对我来说有时很有用,但有时它会为这个字符串返回null "Youtube\ud83d\ude27\ud83d\ude2e\ud83d\ude2f\ud83d"。有人可以指导我吗?

2 个答案:

答案 0 :(得分:8)

表情符号字符位于unicode平面1中,因此需要16位以上才能表示代码点。因此,两个UTF8表示或一个UTF32表示。 Unicode实际上是一个21位系统,对于平面0字符(基本上除表情符号之外的所有东西)16位就足够了,我们可以使用16位。表情符号需要超过16位。

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

另外,为了使用转义字符" \"创建文字字符串。必须转义转义字符:" \\"。

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

表情符号字符串也可以用utf32表示:

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

NSLog输出:

  

string1:

答案 1 :(得分:3)

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;