js解析emoji表情 | 您所在的位置:网站首页 › emoji解释 › js解析emoji表情 |
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 实验室设备网 版权所有 |