rangeOfComposedCharacterSequenceAtIndex
emoji表情
NSString *str = @"??";
NSLog(@"%lu",str1.length);
>>> 2
emoji表情在字符串中是以2個(gè)長(zhǎng)度來(lái)處理的
當(dāng)遇到字符串截取時(shí),如果截?cái)辔恢脛偤迷趀moji表情的中間。此時(shí)emoji表情就會(huì)出現(xiàn)無(wú)法解碼。如下面的情況
NSString *str = @"??";
NSString *subStr = [str substringToIndex:1];
所以這種情況下需要判斷所在的位置是否為emoji,判斷所在位置是否是emoji表情的中間??梢酝ㄟ^(guò)這個(gè)方法rangeOfComposedCharacterSequenceAtIndex
這個(gè)方法的意思是,將emoji表情視為一個(gè)連續(xù)的字符串,如果index處于連續(xù)的字符串之間,就會(huì)返回這個(gè)字符串的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
所以,當(dāng)遇到字符串截取時(shí),可以通過(guò)該方法來(lái)檢測(cè)是否會(huì)截取斷emoji表情。如果剛好截取斷emoji表情,可以截取到emoji之前或?qū)moji也包括在內(nèi)
NSString *str = @"";
const NSInteger lengthLimit = 100;
NSRange range = [str rangeOfComposedCharacterSequenceAtIndex:lengthLimit];
NSString *subStr = [str substringToIndex:range.location];