一个复杂表情到底有多长
NSString* str = @"��������";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"emoji str-len:%d data-len:%d",str.length,data.length);
输出
emoji str-len:11 data-len:25
为何一个表情的长度能有11?
查看表情编码地址:https://apps.timwhitlock.info/unicode/inspect
通过分析,这个复杂表情其实是由四个小表情和三个连接符号组合出来的,其中每个小表情占四个字节,在NSString中的长度为2(可能字节数超过3就算多个字符了);每个连接符号占三个字节,在NSString中的长度为1。
所以该表情存储总长度为 4*4 + 3*3 = 25 ,在NSString中总长度为 4*2 + 3*1 = 11。
补充:这个复杂表情是苹果自己定义的,不属于Unicode编码范围,但每个小表情属于Unicode编码范围,所以将此表情发给安卓端,会被显示成四个连续的小表情。而连接符本身显示出来不占宽度,所以跟没有连接符效果一样。
如何完整的删掉一个复杂表情
NSString* str = @"a问问��������";
NSRange range = [str rangeOfComposedCharacterSequenceAtIndex:str.length-1];
str = [str substringToIndex:range.location];
NSLog(@"emoji location:%d len:%d str:%@",range.location,range.length,str);
输出
emoj location:3 len:11 str:a问问
一个复杂表情到底有多长
“`
NSString* str = @”