1)正如评论中的许多人已经说过的那样,您的字符串由 5 个组合字符序列(如果您愿意,也可以是字符簇)组成。unichar
当被s asNSString
的length
方法分解时,你会得到一个 7 ,这是unichar
在内存中表示你的字符串所需的 s 数。
2)显然UITextField
andUITextView
正在以 unichar 精明的方式处理字符串。好消息,你也可以。见#3。
3)您可以通过使用一些NSString
正确处理组合字符序列的API来获取组合字符序列的数量。我很快就完成了一个简单的例子,它是一个小NSString
类别:
@implementation NSString (ComposedCharacterSequences_helper)
-(NSUInteger)numberOfComposedCharacterSequences{
__block NSUInteger count = 0;
[self enumerateSubstringsInRange:NSMakeRange(0, self.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){
NSLog(@"%@",substring); // Just for fun
count++;
}];
return count;
}
@end
这又是快速代码;但它应该让你开始。如果你像这样使用它:
NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);
你会看到你得到了想要的结果。
有关 API 的深入解释,NSString
请查看WWDC 2012 Session 215 Video "Text and Linguistic Analysis"