Objective c 如何将unicode代码点范围转换为NSString字符范围?
我有一个Objective c 如何将unicode代码点范围转换为NSString字符范围?,objective-c,macos,cocoa,unicode,character-encoding,Objective C,Macos,Cocoa,Unicode,Character Encoding,我有一个NSString和一个unicode代码点范围,表示该NSString中文本的特定部分。由于NSString中的字符与代码点不一一对应,因此我需要以某种方式将代码点范围转换为相应的字符范围。我该怎么做 NSString方法-rangeOfComposedCharacterSequencesForRange:将字符范围转换为grapheme集群范围,但我想做的是与之相反的事情,在API中找不到该方法的反面。即使有这样一种方法可用,我也不认为这正是我所要寻找的,因为(如果我理解正确的话)一个
NSString
和一个unicode代码点范围,表示该NSString
中文本的特定部分。由于NSString
中的字符与代码点不一一对应,因此我需要以某种方式将代码点范围转换为相应的字符范围。我该怎么做
NSString
方法-rangeOfComposedCharacterSequencesForRange:
将字符范围转换为grapheme集群范围,但我想做的是与之相反的事情,在API中找不到该方法的反面。即使有这样一种方法可用,我也不认为这正是我所要寻找的,因为(如果我理解正确的话)一个字形集群与一个unicode代码点不是一回事,事实上它可以由多个代码点组成。您拥有的是来自两个不同世界的混合数据。通常,您可能会得到一个Unicode代码点范围和一个UTF-32字符串(其中对应关系是一对一的),因此提取子字符串将是很简单的。您有两个选择:
for each NSString character {
if (CFStringIsSurrogateHighCharacter(character) ||
CFStringIsSurrogateLowCharacter(character))
{
Skip forward another character in the NSString
}
Increment count of Unicode code points stepped through
}