检查字符的Unicode值的范围

时间:2013-02-11 23:20:10

标签: ios objective-c string unicode unicode-escapes

在Objective-c ......

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

例如,如果我想知道某个字符是否在U+1F300U+1F6FF

的unicode范围内

1 个答案:

答案 0 :(得分:2)

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

要检查原始代码点,您需要将字符串/字符转换为UTF-32(直接对其进行编码)。要做到这一点,您有几个选择:

  1. 获取构成代码点的所有UTF-16字节,并使用this algorithmCFStringGetLongCharacterForSurrogatePair将代理项对转换为UTF-32。

  2. 使用dataUsingEncoding:getBytes:maxLength:usedLength:encoding:options:range:remainingRange:NSString转换为UTF-32,并将原始字节解释为uint32_t

    < / LI>
  3. 使用ICU等库。