概述
之前分享过前端页面使用emoji,讨论了前端页面使用emoji的方法,但是微信昵称中的emoji怎么获取和显示呢?我查找了一些资料,把心得记录下来,供以后开发时参考,相信对其他人也有用。
转码问题
这里借鉴umoji的源码,我总结了emoji的转码方法。
?形式的emoji转Unicode,使用下面的emojiToUnicode函数即可。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="emoji"></div>
<div id="haha">???</div>
<script>
function emojiToUnicode(emoji) {
var backStr = ""
if(emoji&&emoji.length>0){
for(var char of emoji){
var index = char.codePointAt(0)
if(index>65535){
var h = '\\u'+(Math.floor((index - 0x10000) / 0x400) + 0xD800).toString(16);
var c = '\\u'+((index - 0x10000) % 0x400 + 0xDC00).toString(16)
backStr = backStr + h + c
}else{
backStr = backStr + char
}
}
console.log(backStr)
}
return backStr
}
var test = emojiToUnicode(document.querySelector('#haha').innerHTML);
document.querySelector('#emoji').innerHTML = test;
</script>
</body>
</html>
Unicode转?形式的emoji,使用decodeURI()方法即可:
console.log(decodeURI('\ud83c\udf50\ud83d\udc36\ud83c\udf50'));
图片显示
在讨论之前可以先看一下我的上一篇博文:前端页面使用emoji,我们这里使用的是博文中介绍的第二个库。
这个库有3个问题需要解决:
1.库里面使用了jquery,但是移动端一般使用zepto。经过测试,把里面的jquery换成zepto就可以了。
2.库里面的图片解码不全。可以看一下它的emoji.js,可以看到,它的解码主要依靠EMOJI_MAP对象,而这个对象下面有一部分emoji图片的解码还不完整,需要补充。
3.这个库没有解决类似[捂脸]
这种汉字形式的emoji代码。这个就需要自己补充了。
所以综合一下,如果项目确实需要显示微信昵称中的emoji的话,建议还是自己写一个库。
其它库
如果想要在微信小程序,或者vue,react里面使用emoji的话,建议还是去找vue-emoji或者react-emoji这种库比较好。