rangeOfComposedCharacterSequenceAtIndex
emoji表情
NSString *str = @"😝";
NSLog(@"%lu",str1.length);
>>> 2
emoji表情在字符串中是以2个长度来处理的
当遇到字符串截取时,如果截断位置刚好在emoji表情的中间。此时emoji表情就会出现无法解码。如下面的情况
NSString *str = @"😝";
NSString *subStr = [str substringToIndex:1];
所以这种情况下需要判断所在的位置是否为emoji,判断所在位置是否是emoji表情的中间。可以通过这个方法rangeOfComposedCharacterSequenceAtIndex
这个方法的意思是,将emoji表情视为一个连续的字符串,如果index处于连续的字符串之间,就会返回这个字符串的range。
如下效果
NSString *str1 = @"😝";
NSRange range = [str1 rangeOfComposedCharacterSequenceAtIndex:1];
NSLog(@"loc:%lu, len:%lu",range.location,range.length);
>>> loc:0, len:2
NSString *str1 = @"hello 😝 world";
NSRange range = [str1 rangeOfComposedCharacterSequenceAtIndex:6];
NSLog(@"loc:%lu, len:%lu",range.location,range.length);
>>> loc:6, len:2
NSRange range = [str1 rangeOfComposedCharacterSequenceAtIndex:7];
NSLog(@"loc:%lu, len:%lu",range.location,range.length);
>>> loc:6, len:2
所以,当遇到字符串截取时,可以通过该方法来检测是否会截取断emoji表情。如果刚好截取断emoji表情,可以截取到emoji之前或将emoji也包括在内
NSString *str = @"";
const NSInteger lengthLimit = 100;
NSRange range = [str rangeOfComposedCharacterSequenceAtIndex:lengthLimit];
NSString *subStr = [str substringToIndex:range.location];
网友评论