Objective c 无法获取要显示的正确unicode符号

Objective c 无法获取要显示的正确unicode符号,objective-c,ios,fonts,Objective C,Ios,Fonts,我正在iOS应用程序中使用图标,但无法正确显示摄像头符号。在symbolset文档和FontForge中,它表示unicode值为1F4F7 以下是相关代码: [self setTitle:[NSString stringWithFormat:@"%C", (unichar)0x1F4F7] forState:controlState]; 我还尝试: [self setTitle:[NSString stringWithFormat:@"%C", (unichar)0x0001F4F7] fo

我正在iOS应用程序中使用图标,但无法正确显示摄像头符号。在symbolset文档和FontForge中,它表示unicode值为1F4F7

以下是相关代码:

[self setTitle:[NSString stringWithFormat:@"%C", (unichar)0x1F4F7] forState:controlState];
我还尝试:

[self setTitle:[NSString stringWithFormat:@"%C", (unichar)0x0001F4F7] forState:controlState];
但是,这适用于复选标记符号:

[self setTitle:[NSString stringWithFormat:@"%C", (unichar)0x2713] forState:controlState];
字体为开放式。我还尝试将unicode值放入我的Localizable.strings文件中,但没有成功。我需要把它变成TrueType字体吗


更新:我尝试转换为TrueType字体,但遇到了相同的问题。

问题是unichar只有16位,但您想要的字符位于基本多语言平面(BMP)之外,因此在UTF-16(代理项对)中有2个字符。您可以找出这对,或者执行以下操作:

UTF32Char c = 0x1F4F7;
NSData *utf32Data = [NSData dataWithBytes:&c length:sizeof(c)];
NSString *camera = [[NSString alloc] initWithData:utf32Data encoding:NSUTF32LittleEndianStringEncoding];

//do stuff with camera here and release if not using ARC

问题是unichar只有16位,但您想要的字符在基本多语言平面(BMP)之外,因此在UTF-16(代理项对)中需要2个字符。您可以找出这对,或者执行以下操作:

UTF32Char c = 0x1F4F7;
NSData *utf32Data = [NSData dataWithBytes:&c length:sizeof(c)];
NSString *camera = [[NSString alloc] initWithData:utf32Data encoding:NSUTF32LittleEndianStringEncoding];

//do stuff with camera here and release if not using ARC

我刚刚能够实现这一点:
[[NSString alloc]initWithUTF8String:“\xF0\x9F\x93\xB7”]
。这在内存上会比使用UTF32更容易吗?稍微容易一点,但他们最终会做同样的事情。您应该以可读性为目标,并在以后担心性能。(如果你经常使用这个字符,而性能是一个问题,缓存一个字符串并重用它,而不是每次都重新创建它。)我讨厌在不必要的情况下乱搞原始UTF-8字节,但这不会有什么区别。我刚刚能够做到这一点:
[[NSString alloc]initWithUTF8String:“\xF0\x9F\x93\xB7”
。这在内存上会比使用UTF32更容易吗?稍微容易一点,但他们最终会做同样的事情。您应该以可读性为目标,并在以后担心性能。(如果您经常使用这个字符,而性能是一个问题,请缓存一个字符串并重用它,而不是每次都重新创建它。)如果不需要的话,我讨厌乱搞原始UTF-8字节,但这不会有什么区别。