我正在尝试在各种项目中显示一个字符串,例如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"
。有人可以指导我吗?
答案 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;