我有一个包含字符代码的NSString
,格式如下:0x1F514
。
我想将这个NSString
添加到另一个NSString
中,但不是使用它的字面值,而是隐藏在其后面的图标。在这种情况下,是一个铃铛表情符号。
我该如何轻松地将这个NSString
转换为显示表情符号,而不是字符代码?
我有一个包含字符代码的NSString
,格式如下:0x1F514
。
我想将这个NSString
添加到另一个NSString
中,但不是使用它的字面值,而是隐藏在其后面的图标。在这种情况下,是一个铃铛表情符号。
我该如何轻松地将这个NSString
转换为显示表情符号,而不是字符代码?
这样做就可以了:
NSString *c = @"0x1F514";
unsigned intVal;
NSScanner *scanner = [NSScanner scannerWithString:c];
[scanner scanHexInt:&intVal];
NSString *str = nil;
if (intVal > 0xFFFF) {
unsigned remainder = intVal - 0x10000;
unsigned topTenBits = (remainder >> 10) & 0x3FF;
unsigned botTenBits = (remainder >> 0) & 0x3FF;
unichar hi = topTenBits + 0xD800;
unichar lo = botTenBits + 0xDC00;
unichar unicodeChars[2] = {hi, lo};
str = [NSString stringWithCharacters:unicodeChars length:2];
} else {
unichar lo = (unichar)(intVal & 0xFFFF);
str = [NSString stringWithCharacters:&lo length:1];
}
NSLog(@"str = %@", str);
@"\u1f514"
无法正常工作是因为这些\u
值不能超出BMP范围,即>0xFFFF,即>16位。stringByAppendingString
一样通常地附加字符串。