ios – 检查字符的Unicode值范围


Objective-c

如果我有一个像“Δ”这样的字符,我如何获得unicode值,然后确定它是否在某个值范围内.

例如,如果我想知道某个字符是否在U 1F300到U 1F6FF的unicode范围内

最佳答案 NSString使用UTF-16在内部存储代码点,因此您正在寻找的范围(U 1F300到U 1F6FF)中的那些将存储为
surrogate pair(四个字节).尽管它的名字,characterAtIndex :(和unichar)不知道代码点,并且会给你在它给你的索引处看到的两个字节(你看到的55357是UTF-16中代码点的主要替代品) ).

要检查原始代码点,您需要将字符串/字符转换为UTF-32(直接对其进行编码).为此,您有以下几种选择:

>获取构成代码点的所有UTF-16字节,并使用this algorithmCFStringGetLongCharacterForSurrogatePair将代理项对转换为UTF-32.
>使用dataUsingEncoding:或getBytes:maxLength:usedLength:encoding:options:range:remainingRange:将NSString转换为UTF-32,并将原始字节解释为uint32_t.
>使用像ICU这样的库.

点赞