前端处理emoji表情的编码解码

解决方案:

emoji 表情符 编码是十六进制的,把表情符转码成八进制的进行存储即可

//把utf16的emoji表情字符进行转码成八进制的字符
function utf16toEntities(str) {
    
    
    var patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则  
    return 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;
        }
    });
}
 
//将编码后的八进制的emoji表情重新解码成十六进制的表情字符
function entitiesToUtf16(str) {
    
    
    return str.replace(/&#(\d+);/g, function (match, dec) {
    
    
        let H = Math.floor((dec - 0x10000) / 0x400) + 0xD800;
        let L = Math.floor(dec - 0x10000) % 0x400 + 0xDC00;
        return String.fromCharCode(H, L);
    });
}
微信示例:

1、新建一个自定义 js 文件(base64.js)
2、在自定义 js 文件(base64.js)中加入以下代码
3、在需要使用的页面引入自定义 js 文件(base64.js)

1、新建一个自定义 js 文件(base64.js)

在这里插入图片描述

2、在自定义 js 文件(base64.js)中加入以下代码

//把utf16的emoji表情字符进行转码成八进制的字符
function utf16toEntities(str) {
    
    
    var patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则  
    return 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;
        }
    });
}

//将编码后的八进制的emoji表情重新解码成十六进制的表情字符
function entitiesToUtf16(str) {
    
    
    return str.replace(/&#(\d+);/g, function(match, dec) {
    
    
        let H = Math.floor((dec - 0x10000) / 0x400) + 0xD800;
        let L = Math.floor(dec - 0x10000) % 0x400 + 0xDC00;
        return String.fromCharCode(H, L);
    });
}

module.exports = {
    
    
    utf16toEntities: utf16toEntities,
    entitiesToUtf16: entitiesToUtf16
}

3、在需要使用的页面引入自定义 js 文件(base64.js)

import base64Js from '../../utils/base64.js';

Page({
    
    
    /**
     * 页面的初始数据
     */
    data: {
    
    
    	userInfo: {
    
    }	// 用户信息
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function() {
    
    
    	request.get('xxxx', {
    
    xxx}).then(res => {
    
    
    		// 调用 entitiesToUtf16 对 niki 进行解码
            res.userInfo.niki = base64Js.entitiesToUtf16(res.userInfo.niki);
	        ........
	        ........
	    }).catch(e => {
    
    
	        xxxxx
	    })
    },
    saveUserInfo(userInfo){
    
    
    	.......
    	// 调用 utf16toEntities 对 niki 进行编码
    	userInfo.niki = base64Js.utf16toEntities(userInfo.niki);
		.......
    }

猜你喜欢

转载自blog.csdn.net/qq_25992675/article/details/106384197