Objective-C截取字符串时emoji表情的处理
来源:互联网 发布:矩阵杨氏不等式 编辑:程序博客网 时间:2024/05/17 08:35
我们在开发中会经常遇到限制字符串长度的情况,如输入框限制输入字数,我们会经常使用substringToIndex进行字符串截取,这样做有一个潜在的问题,那就是当截取的index恰好是一个emoji表情的时候,因为一个emoij在字符串的length并不等于1,这样就会把emoji表情分割开来,从而造成整个字符串不显示或者最后一个字符是乱码的情况。
起初我发现截取一半的emoji的时候吧字符串进行UTF8String转码后为NULL,所以根据此我写了这样一个方法:
-(NSString *)subStringWith:(NSString *)string ToIndex:(NSInteger)index{ NSString *result = string; const char *res = [result substringToIndex:index].UTF8String; if (res == NULL) { result = [result substringToIndex:index - 1]; }else{ result = [result substringToIndex:index]; } return result;}
即少截取一个字符以避免截取到emoji的情形。
但是放到以前还行,现在的话就会有问题,这种方法是建立在emoji表情都占两个length的长度基础上的,而现在新出的国旗emoji占了四个长度,当截取到emoji的前三个的时候进行转码并不等于NULL。后翻看NSString的文档,发现了这两个方法官方文档没有给出说明,索性试一试:
- (NSRange)rangeOfComposedCharacterSequenceAtIndex:(NSUInteger)index;- (NSRange)rangeOfComposedCharacterSequencesForRange:(NSRange)range NS_AVAILABLE(10_5, 2_0);
我发现当把截取的index传给rangeOfComposedCharacterSequenceAtIndex方法时返回的是index所在的emoji表情的range,所以Objective-C已经考虑到了emoji表情截取的问题,但是没有给出注释。。。
故而修改方法如下:
-(NSString *)subStringWith:(NSString *)string ToIndex:(NSInteger)index{ NSString *result = string; if (result.length > index) { NSRange rangeIndex = [result rangeOfComposedCharacterSequenceAtIndex:index]; result = [result substringToIndex:(rangeIndex.location)]; } return result;}
3 0
- Objective-C截取字符串时emoji表情的处理
- 【转】Objective-C截取字符串时emoji表情的处理
- 截取带emoji表情的utf8字符串
- java字符串Emoji表情的处理
- 如何截取包含中文、Emoji表情的字符串
- 截取含有中文、Emoji表情、特殊符号的字符串
- 字符串中Emoji表情处理
- C# 处理带Emoji表情的的字符串
- emoji表情符的处理
- 计算字符串长度(处理emoji表情)
- java字符串中Emoji表情处理
- EditText禁止输入Emoji表情的处理
- andoid emoji表情处理
- 处理Emoji表情(unicode)
- emoji表情处理
- php emoji表情处理
- Emoji表情处理
- Emoji表情后台处理
- listagg( ) within group ( order by ) 与 wm_concat
- Xpath的使用
- 【ZYNQ7 】AXI_LITE_MASTER 实验
- android两种异步处理原理
- 2-6 静态函数库和动态函数库的建立
- Objective-C截取字符串时emoji表情的处理
- ASP.NET学习路线图
- dkpg命令的用法
- redis集群搭建
- 微信APP支付 C#
- windows 2008 配置本地IP安全策略
- 推荐网站
- Android 内存泄露的检查分析方法
- 谈谈互联网后端基础设施