js解析emoji表情 您所在的位置:网站首页 emoji解释 js解析emoji表情

js解析emoji表情

#js解析emoji表情| 来源: 网络整理| 查看: 265

Emoji

公司的产品之前只有网页端,并没有提供emoji表情,之后将某个模块整合到app中,里面有个评论功能,在手机端可以输入emoji,显示的时候是空白,说明数据库并没有存储成功,查阅资料后得知emoji是四个字节,而mysql5.5.3前的版本utf8编码最多只支持3个字节。

js解析emoji

先需要了解几个概念,js的编码方式、utf16、unicode

1.JavaScript语言采用Unicode字符集,但是只支持一种编码方法ucs-2

2.utf16编码

utf16是ucs-2的超集

3.Unicode只规定了每个字符的码点,到底用什么样的字节序表示这个码点,就涉及到编码方法

由于JavaScript只能处理UCS-2编码,造成所有字符在这门语言中都是2个字节,如果是4个字节的字符,会当作两个双字节的字符处理。JavaScript的字符函数都受到这一点的影响,无法返回正确结果

emoji表情是由utf16编码的,可能是2个字节,也可能是四个字节

这里的解析我用的是twemoji库,原理是将utf16编码转为unicode的十六机制并以此十六进制作为emoji图片的命名

这里的关键是如何将utf16转为unicode十六进制

UTF-16的转码公式

将unicode转为utf16,官方给了公式

Unicode码点转成UTF-16的时候,首先区分这是基本平面字符(2字节),还是辅助平面字符(4字节)。如果是前者,直接将码点转为对应的十六进制形式,长度为两字节。

如果是辅助平面字符,Unicode 3.0版给出了转码公式。

H= Math.floor((c-0x10000)/0x400)+0xD800 //高位

L = (c-0x10000)%0x400+0xDC00 //低位

将utf16转为unicode则是知道H,L,求c,学过方程组的应该都会解答吧

给出上述转化的函数

1 /*unicode编码范围 2字节0x0000-0xffff 2 四字节为0x010000-0x10ffff 3 U+D800到U+DFFF 为空段 4 由于JavaScript只能处理UCS-2编码,造成所有字符在这门语言中都是2个字节,如果是4个字节的字符,会当作两个双字节的字符处理 5 */ 6 function toCodePoint(unicodeSurrogates, sep) { 7 var 8 r = [], 9 c = 0, 10 p = 0, 11 i = 0; 12 while (i /g,function(a){ 27 if(faceMap[a]){ 28 return toUnicode(faceMap[a]); 29 }else{ 30 return a; 31 } 32 // return a?toUnicode(faceMap[a]):''; 33 }); 34 return htmlEncode(unicodeStr); 35 }

 已经基本完成我需要的功能了(兼容至ie6+)。

结语

 

献上本人拙劣的demo(css不行)

[emoji picker demo](https://ceau.github.io/emojipicker/demo.html)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有