4

在 Objective-C 中...

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

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

4

1 回答 1

2

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

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

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

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

  3. 使用像ICU这样的库。

于 2013-02-14T04:52:09.433 回答