emoji表情解析

做的一个项目中,有一个场景是把社交数据拿到web上去展现(然而用户很喜欢在朋友圈,微博之类的社交媒体上用emoji表情来表达情感),所以表情处理是一个必须拿下的点。

1.微信数据

微信朋友圈爬去到的表情 是类似于这种形式的 [微笑],处理思路很简单,获得图片库的所有图片,只要把这种类型的,正则匹配出来,换成相应的图片路径好了

var textAfter = newText.replace(/\[.{1,3}\]/g, function (moji) {
    return weixinMojiImg(moji);
}
var weixinMoji = {
    '[微笑]': 'weixiao',
    '[撇嘴]': 'piezui'
}
function weixinMojiImg(text) {
    return '<img width="17" src="/xxx/images/weixin-moji-img/' + weixinMoji[text] + '.png">';
}

具体可以参考下我写的 github链接

2. 微博,qq空间数据表情处理也类似,就不赘述

3.现在要说的是另一类表情,许多用户靠搜狗输入法或者系统自带输入法输入的emoji表情,例如:🐱 对应的编码是\uD83D\uDC31。

顺便先补充下unicode知识,看这两篇阮一峰的文章《字符编码笔记》 《unicode》

unicode 9.0 版本 这应该是提供unicode标准的规范,不同厂商都是根据这个标准去解析emoji的

unicode emoji 从这个网站可以了解到 ,apple,google,facebook,twitter,mozilla,microsoft,lg,samsung 对标准编码的unicode emoji 都做了相应的表情库。

其实在用户的浏览端,这种表情解析不是一定要处理的,因为不管是手机还是浏览器,它都会按照自己的标准对unicode emoji进行解析,我在使用中有一个场景是:要把这些网页转化成pdf(用的是 casperjs,基于phantomjs[headless webkit]),由于它是headless webkit,所以这些表情它是不会去处理的,所以我得把这些emoji转化成img标签,然后才能导出带有这些表情的pdf。

最后解决方案也很简单,推特两年前把他的表情库给开源了,github链接 。 代码也很简单,先把js库引入项目,然后再调用它的DOM parse 模块就搞定了(指定DOM里的所有表情解析出来,变成img标签进行展示)