iOS带Emoji字符串的安全截取

由于需求要求昵称最多显示5个字符,之前写的代码是这个

NSString * nick = [nick substringToIndex:kNickMaxLength];

在有emoji表情的昵称很可能截取出问题,比如这样的昵称:“马致远啊🐒”,其中的“🐒”的length为2,但是截取的字符串长度为5,猴子只剩一半了。。
显示成了这样:


怎么解决呢?

苹果提供的NSString里面rangeOfComposedCharacterSequenceAtIndex方法
可以遍历每个ComposedCharacterSequence单元,普通字符range的length为1,emoji有的为2,有的为4,将来很可能有其他的值。

所以,截取前几个字符可以这个写:

//截取字符前多少位,处理emoji表情问题
////🐒🐒🐒🐒 + 截取3 = 🐒🐒🐒
-(NSString *)subStringWithEmoji:(NSString *)emojiString 
                    limitLength:(NSInteger)limitLength{
    if(emojiString.length < limitLength) return emojiString;
    
    @autoreleasepool {
        NSString * subStr = emojiString;
        NSRange  range;
        NSInteger index = 0;
        for(int i=0; i< emojiString.length; i += range.length){
            range = [emojiString rangeOfComposedCharacterSequenceAtIndex:i];
            NSString * charrrr = [emojiString substringToIndex:range.location + range.length];
            index ++;
            if(index == limitLength){
                subStr = charrrr;
                break;
            }
        }
        return subStr;
    }
}

希望能帮助有需要的朋友。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容