Fork me on GitHub

微信昵称的emoji的尝试性解决方案

概述

之前分享过前端页面使用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这种库比较好。

posted @ 2018-08-19 17:00  馒头加梨子  阅读(1115)  评论(0编辑  收藏  举报