【发布时间】:2015-09-03 01:37:48
【问题描述】:
我正在尝试获取包含一堆表情符号(包括标志字符)的 NSString 的长度。现在我知道如何获取包含表情符号的字符串的长度了:
__block NSInteger length = 0;
[string enumerateSubstringsInRange:range
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
length++;
}];
但是,“NSStringEnumerationByComposedCharacterSequences”在这种情况下不起作用。普通表情符号由两个字符组合而成。国旗表情符号由两个类似表情符号的字符组合而成。因此,一个没有任何枚举技术的标志 emoji 的长度是 4。
如何获得包含标志表情符号的 NSString 的正确长度(字符数)?
【问题讨论】:
-
NSInteger length = [string length];有什么问题?您可以使用substringWithRange来获取您感兴趣的范围。 -
@Alex 请注意,当您说标志字符的长度为 4 时,即 4 个 UTF-16 代码单元或 8 个字节。
-
@i_am_jorf @"????????".length 返回 4,这是您对一个字符的期望吗? @" -s????????????????-" 中标志字符的范围是多少?你认为范围是 NSMakeRange(5, 4) 吗?
-
啊,我明白了。我提到范围是因为我看到您正在将范围传递给上述范围。我不确定答案,但是您的示例使您的问题更加清楚。
-
Foundation 中的 Unicode 完全被破坏了。一年前,斯威夫特也是如此,但至少他们对长度是诚实的。在 Swift 2.0 中统一是固定的,雅虎!所以,请大家 bugreport 并要求 Apple 将 eSwift unicode 更改为
NSString。
标签: ios objective-c nsstring emoji