(# ゚Д゚) 是一个 5 个字母的单词。但在 iOS 中,[@"(# ゚Д゚)" 长度] 是 7。为什么呢?

2024-01-20

(# ゚Д゚) 是一个 5 个字母的单词。但在 iOS 中,[@"(# ゚Д゚)" 长度] 是 7。

  1. Why?

  2. 我在用着<UITextInput>修改a中的文本UITextField or UITextView。当我制作一个 5 个字符长度的 UITextRange 时,它​​只能覆盖 (# ゚Д゚) 。那么,为什么这个 (# ゚Д゚) 看起来像一个 5 个字符的单词UITextField and UITextView,但看起来像 NSString 中的 7 个字符的单词???

  3. 在这种情况下如何获得字符串的正确长度?


1)正如评论中的许多人已经指出的那样,您的字符串由 5 个组成的字符序列(如果您愿意,也可以是字符簇)组成。当被分解时unichars as NSString’s length方法你会得到 7,这是unichar在内存中表示字符串所需的时间。

2)显然是UITextField and 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

同样,这是快速代码;但它应该让你开始。如果你像这样使用它:

NSString *string = @"(# ゚Д゚)";
NSLog(@"string length %i", string.length);
NSLog(@"composed character count %i", [string numberOfComposedCharacterSequences]);

您会看到您得到了想要的结果。

如需深入解释NSStringAPI 查看WWDC 2012 Session 215 Video "Text and Linguistic Analysis"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(# ゚Д゚) 是一个 5 个字母的单词。但在 iOS 中,[@"(# ゚Д゚)" 长度] 是 7。为什么呢? 的相关文章

随机推荐