emoji表情 - 字符串,互转

2020-06-19  本文已影响0人  coderfl
// emoji表情转字符串
            utf16toEntities(str) {
                var patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则
                str = str.replace(patt, function (char) {
                    var H, L, code;
                    if (char.length === 2) {
                        H = char.charCodeAt(0); // 取出高位
                        L = char.charCodeAt(1); // 取出低位
                        code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法
                        return "&#" + code + ";";
                    } else {
                        return char;
                    }
                });
                return str;
            },
// 字符串恢复emoji表情
            uncodeUtf16(str) {
                var reg = /&#.*?;/g;
                var result = str.replace(reg, function (char) {
                    var H, L, code;
                    if (char.length == 9) {
                        code = parseInt(char.match(/[0-9]+/g));
                        H = Math.floor((code - 0x10000) / 0x400) + 0xD800;
                        L = (code - 0x10000) % 0x400 + 0xDC00;
                        return unescape("%u" + H.toString(16) + "%u" + L.toString(16));
                    } else {
                        return char;
                    }
                });
                return result;
            }

使用前请自测,表情可能过滤不全

上一篇 下一篇

猜你喜欢

热点阅读