ios - NSString 中的字符编码转为 unicode 字符

标签 ios objective-c unicode character-encoding emoticons

我有一个 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/

相关文章:

iphone - 如何创建自定义 UIDatePicker 控件

objective-c - Apple Watch (WatchKit) 推送操作

objective-c - 磁盘仲裁 Objective-C : Put All Drives and Partitions in an Array

objective-c - FBConnect 登录,与 webview 共享?

ios - UICollectionView 单元格显示不正确

ios - AFNetworking 2.2.1 从 Amazon S3 服务器加载图像

c - c源代码中的Unicode字符 'SPEAKER WITH THREE SOUND WAVES'(U+1F50A)

android - 如何获得有关表情符号的所有信息

ios - iOS 应用程序名称中的特殊字符或图像

ios - 无法打开依赖文件 SwiftStdLibToolInputDependencies.dep