在Objective-c ......
如果我有一个像“Δ”这样的字符,我如何获得unicode值,然后确定它是否在某个值范围内。
例如,如果我想知道某个字符是否在U+1F300
到U+1F6FF
答案 0 :(得分:2)
NSString
使用UTF-16在内部存储代码点,因此您正在寻找(U+1F300
到U+1F6FF
)范围内的代码点将存储为surrogate pair (四个字节)。尽管它的名称,characterAtIndex:
(和unichar
)不知道代码点,并且会给你在它给出的索引处看到的两个字节(你看到55357
是UTF-16中代码点的主要代理。
要检查原始代码点,您需要将字符串/字符转换为UTF-32(直接对其进行编码)。要做到这一点,您有几个选择:
获取构成代码点的所有UTF-16字节,并使用this algorithm或CFStringGetLongCharacterForSurrogatePair
将代理项对转换为UTF-32。
使用dataUsingEncoding:
或getBytes:maxLength:usedLength:encoding:options:range:remainingRange:
将NSString
转换为UTF-32,并将原始字节解释为uint32_t
。
使用ICU等库。