iOS 10 emoji总结
- emoji 中表情包含很多,其中最复杂的就是各种带人的组合表情,什么一家四口,一家三口,相亲相爱。 如果你细心一点儿就会发现,其实这些表情都是单个emoji表情拼接而成的。
2.\U200d 如果你为了兼容数据库而过滤掉了部分emoji表情,那应该对这个Unicode不陌生,它会出现在你过滤后的结果中,成片成片出现,但是你有没有想过他到底是什么呢
维基百科 :https://en.wikipedia.org/wiki/Zero-width_joiner
零宽连字 即\U200d的unicode编码 ,全称是Zero Width Joiner,简称“ZWJ”,是一个不打印字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。而在emoji中,充当的就是连接作用。emoji中复杂的表情(如下表)。
emoji | 对应Unicode编码 | 表情组成 |
---|---|---|
👨👩👦👦 | \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66 | 👨 Man, 👩 Woman, 👦 Boy and 👦 Bo |
👩❤️💋👩 | \ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69 | 👩 Woman, ❤ Heavy Black Heart, ️ Variation Selector-16, 💋 Kiss Mark and 👩 Woman |
👨👩👦 | \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66 | 👨 Man, 👩 Woman and 👦 Bo |
在Unicode的对照表中我们发现,\u200d是不代表任何意义的。
我遇到的问题:在开发过程中,由于后台服务器数据库不支持部分emoji,所以进行了过滤,但是好巧不巧的没有过滤\u200d这个字符。在iOS10之前的系统中,是不会有问题的。但是我们app的用户在升级的iOS10 之后,由于\u200d的问题造成了闪退。推断是iOS10 对emoji进行了校验。对于\u200d字符进行了检验处理。由于我们只过滤的单个emoji表情,所以遗留的连接符没有通过校验,造成的闪退