发布于2022年11月4日3年前 表情符的编码解码 网上有给出一些解决方法,比如加载表情符图片,修改数据库的字符编码等,这些方法都不太好,也没有解决问题,后面找了比较久才找到合适的解决的方法:表情符编码是十六进制的,需要把表情符转码成八进制的。 下面是我用到的代码: //把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); }); }表情符的编码解码 网上有给出一些解决方法,比如加载表情符图片,修改数据库的字符编码等,这些方法都不太好,也没有解决问题,后面找了比较久才找到合适的解决的方法:表情符编码是十六进制的,需要把表情符转码成八进制的。 下面是我用到的代码: //把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); }); }
创建帐户或登录后发表意见