我有一堆Unicode字符被封装到NSNumber中,就像这样:
我发现有些图标可以正常创建,但不是全部;据我观察,那些由5个数字组成的Unicode码无法正确创建。
例如,以下图标可以正常创建:
但是这些不行:
@(0x1f4de), // EntypoIconTypePhone
@(0x1f4f1), // EntypoIconTypeMobile
@(0xe789), // EntypoIconTypeMouse
@(0xe723), // EntypoIconTypeAddress
@(0x2709), // EntypoIconTypeMail
@(0x1f53f), // EntypoIconTypePaperPlane
@(0x270e), // EntypoIconTypePencil
这些是来自Entypo字体的图标(强烈推荐)。
这是我使用的代码,用于从Unicode创建NSString:
NSNumber *u = self.unicodeLookup[type];
int unicode = [u intValue];
UniChar chars[] = {unicode};
NSString *string = [[NSString alloc] initWithCharacters:chars length:sizeof(chars) / sizeof(UniChar)];
我发现有些图标可以正常创建,但不是全部;据我观察,那些由5个数字组成的Unicode码无法正确创建。
例如,以下图标可以正常创建:
@(0xe723), // EntypoIconTypeAddress
@(0x2709), // EntypoIconTypeMail
但是这些不行:
@(0x1f4de), // EntypoIconTypePhone
@(0x1f4f1), // EntypoIconTypeMobile
我相信这是我的转化代码。我不太理解所有这些编码的复杂性。
int
至少总是32位,但unichar
总是16位。你的选择之一是将字符存储为UTF-32(在unsigned
的情况下,而不是unichar
),然后使用[NSString initWithBytes:length:encoding:]
,编码为NSUTF32StringEncoding
,但是可能需要解决字节序问题(我还没有深入研究)。 - trojanfoe