NSString长度与标志表情符号

时间:2015-09-03 01:37:48

标签: ios objective-c nsstring emoji

我试图获取包含一堆表情符号的NSString的长度,包括标志字符。现在我知道如何获得包含表情符号的字符串的长度:

__block NSInteger length = 0;
[string enumerateSubstringsInRange:range
                           options:NSStringEnumerationByComposedCharacterSequences
                        usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    length++;
}];

然而," NSStringEnumerationByComposedCharacterSequences"在这种情况下不起作用。普通的表情符号由两个字符组成。标志表情符号由两个表情符号组成的字符组成。因此,没有任何枚举技术的一个标志表情符号的长度是4.

如何获得包含标志emojis的NSString的正确长度(字符数)?

2 个答案:

答案 0 :(得分:2)

我尝试了以下解决方案。 对于普通的表情符号,它返回2,对于标志,它将给出4。 这也适用于普通的字符和特殊字符。

const char *cString = [string UTF8String];

int textLength = (int)strlen(cString);

答案 1 :(得分:1)

我强烈建议您阅读This ArticleOle Begemann,该书解释了NSString / Unicode / Encoding,同时还谈到了NSString长度计数,比较等方面的一些陷阱。

根据本文:

您可以使用:

[text lengthOfBytesUsingEncoding:NSUTF32StringEncoding] / 4