YuA*_*uAo 6 iphone nsstring ios uitextinput
(#゚Д゚)是一个5个字母的单词.但是在iOS中,[@"(#゚Д゚)"长度"是7.
为什么?
我<UITextInput>用来修改UITextField或中的文本UITextView.当我创建一个5个字符长度的UITextRange时,它可以覆盖(#゚Д゚).那么,为什么这个(#゚Д゚)看起来像一个5个字符的字UITextField和UITextView,但看起来像一个NSString的7个字符的字???
在这种情况下,如何获得正确长度的字符串?
1)正如评论中的许多人已经说过的那样,你的字符串是由5个组成的字符序列(或者你喜欢的字符簇)组成的.当unichar按照NSStrings的length方法分解时,你会得到一个7,它是unichar在内存中表示你的字符串所需的s 数.
2)显然,UITextField并且UITextView正在以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
Run Code Online (Sandbox Code Playgroud)
这又是快速代码; 但它应该让你开始.如果您这样使用它:
NSString *string = @"(# ???)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);
Run Code Online (Sandbox Code Playgroud)
你会看到你得到了理想的结果.
有关NSStringAPI 的深入解释,请查看WWDC 2012 Session 215 Video "Text and Linguistic Analysis"
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |