我有一个 NSString
,它的 charactercode
是这样的: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 位.
因此,我的代码所做的是检查该场景并执行相关的 surrogate pair magic制作正确的字符串。
希望这正是您想要的并且有意义!
关于ios - NSString 中的字符编码转为 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12963067/