显示emoji 表情算是很普通的功能了,无论是发个文章,发表评论,有的昵称都要表情,能咋办呢?我才不会说我做不到呢?
有必要讲一下,emoji在三端(安卓iOS后台)都有不同的处理方案,然而各顾各的肯定不行。我们是由后台统一对emoji表情进行unicode编码,然后存进数据库表里,所以iOS和安卓上传数据时不做任何处理,当然后台接受前台的未处理的emoji数据,它不处理存进数据库会报错的。
看一下后台给我们返回的啥strContent
--strContent--
早上好!`\ud83d\udc8e`合家欢系列产品
`\ud83c\udfc1`高品定制 只为您尊贵的你
`\ud83c\udf81`全程0购物、不撤销、无必销
⚠提供自拍杆、矿泉水、充电宝
`\ud83d\udd14`精选酒店 优选导游
☎️
重庆西南旅行社
抱着试一试的心情对它进行编码处理--strASCII--
//编码
+(NSString *)postNSNonLossyASCIIStringEncoding:(NSString *)strContent
{
NSData *jsonData = [strContent dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *jsonContent = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
return jsonContent;
}
--strASCII--\u65e9\u4e0a\u597d!\ue312\ue312`\\ud83d\\udc8e`\u5408\u5bb6\u6b22\u7cfb\u5217\u4ea7\u54c1
`\\ud83c\\udfc1`\u9ad8\u54c1\u5b9a\u5236 \u53ea\u4e3a\u60a8\u5c0a\u8d35\u7684\u4f60
`\\ud83c\\udf81`\u5168\u7a0b0\u8d2d\u7269\u3001\u4e0d\u64a4\u9500\u3001\u65e0\u5fc5\u9500
\u26a0\u63d0\u4f9b\u81ea\u62cd\u6746\u3001\u77ff\u6cc9\u6c34\u3001\u5145\u7535\u5b9d
`\\ud83d\\udd14`\u7cbe\u9009\u9152\u5e97 \u4f18\u9009\u5bfc\u6e38
\u260e\ufe0f
\u91cd\u5e86\u897f\u5357\u65c5\u884c\u793e
``包含的绿色部份是emoji表情编码,为了做转码前后对比
对比后发现,比起初的表情编码多了个\,现在只要去除掉这个多余的\就可以统一解码显示出emoji了。
来去掉这个\吧
- 这个\是打印出来的,实际上是\,转义符都懂的😁,那就多了\
- 用\拆分成数组
- 去掉""也就是\\中间的空字符
- 再用\重组成字符串
NSMutableArray *array = [NSMutableArray arrayWithArray:[strASCII componentsSeparatedByString:@"\\"]];
for (int i=0; i<[array count]; i++) {
NSString *str=[array objectAtIndex:i];
if ([str isEqualToString:@""""]) {
[array removeObjectAtIndex:i];
}
}
NSString *string = [array componentsJoinedByString:@"\\"];
最后解码
jsonString = [strContent==nil?@"":[NSString stringWithFormat:@"\\%@",string] UTF8String];
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)];
NSString *jsonContent= [[NSString alloc] initWithData:jsonData encoding:NSNonLossyASCIIStringEncoding];
NSString *ASContent=[NSString stringWithFormat:@"%@",jsonContent==nil?strContent:jsonContent];
网友评论