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