前言:
1,符号表情有多种来源,微信表情,输入法表情等。提供了两种方案,建议选择方案2
2,在不一样的标签或场景中显示情况不一样,比如在HTML中显示正常,在微信推送消息中却无法显示,这里只能保证大部分情况和表情
2,处理方案1——转码;在JS中处理,
3,处理方案2——jar包
正文:
处理方案1——转码
JS:
/** * Unicode码点转成UTF-16 * H = Math.floor((c-0x10000) / 0x400)+0xD800 * L = (c - 0x10000) % 0x400 + 0xDC00 */ /** * 用于把用utf16编码的字符转换成实体字符,以供后台存储 * @param {string} str 将要转换的字符串,其中含有utf16字符将被自动检出 * @return {string} 转换后的字符串,utf16字符将被转换成&#xxxx;形式的实体字符 */ function 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; } }); //console.log(str); return str; }
处理方案2——jar包
我的项目jar包是由Maven管理的(用自己的方式引入jar包即可)
<dependency> <groupId>com.vdurmont</groupId> <artifactId>emoji-java</artifactId> <version>4.0.0</version> </dependency>
EmojiParser.parseToUnicode("XX") //EmojiParser还有其他方法,比如EmojiParser.removeAllEmojis()