Emoji表情过滤
2016-03-18 00:00
316 查看
摘要: 由于最新版的emoji使用的编码和之前老版本的编码增加了四字节的一些表情,导致一些新版表情过滤不掉并入库失败,于是针对于新版的unicode10中的表情编码进行分析并使用代码过滤
首先,看一下unicode10中的新版emoji表情包(链接),一共有1600+款表情,
经过分析,新增加的表情基本都是两个或者更多unicode码,于是将以上表情包中的html文件下载下来进行解析,并输出成java的map,代码基本格式如下
经过对表情的unicode进行不同编码格式的分析,发现两个unicode以上的表情的16进制基本都是以/F0开头,决定拿这些开刀
将其转化成字符串之后
将/F0后面的四个16进制的转化成/3F,即“?”;
然后再讲替换之后的16进制字符串转化成正常的字符串
运行结果如下图
![](http://static.oschina.net/uploads/space/2016/0318/130414_m3jC_2354306.png)
code下载地址:http://download.csdn.net/detail/pan_shuyang/9465438
首先,看一下unicode10中的新版emoji表情包(链接),一共有1600+款表情,
经过分析,新增加的表情基本都是两个或者更多unicode码,于是将以上表情包中的html文件下载下来进行解析,并输出成java的map,代码基本格式如下
map.put("😀", "U+1F600"); map.put("😁", "U+1F601"); map.put("😂", "U+1F602"); map.put("😃", "U+1F603"); map.put("😄", "U+1F604"); map.put("😅", "U+1F605"); map.put("😆", "U+1F606");
经过对表情的unicode进行不同编码格式的分析,发现两个unicode以上的表情的16进制基本都是以/F0开头,决定拿这些开刀
/** * 字符串转换成十六进制字符串 * @param String str 待转换的ASCII字符串 * @return String 每个Byte之间/分隔,如: [/61/6C/6B] */ public static String str2HexStr(String str) { char[] chars = "0123456789ABCDEF".toCharArray(); StringBuilder sb = new StringBuilder(""); byte[] bs = str.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { sb.append('/'); bit = (bs[i] & 0x0f0) >> 4; sb.append(chars[bit]); bit = bs[i] & 0x0f; sb.append(chars[bit]); } return sb.toString().trim(); }
将其转化成字符串之后
while(resultStr.indexOf("/F0") != -1){ resultStr = resultStr.replace(resultStr.substring(resultStr.indexOf("/F0"), resultStr.indexOf("/F0") + 12), "/3F"); } resultStr = resultStr.replace("/", ""); System.out.println(resultStr);
将/F0后面的四个16进制的转化成/3F,即“?”;
然后再讲替换之后的16进制字符串转化成正常的字符串
/** * 十六进制转换字符串 * @param String str Byte字符串(Byte之间无分隔符 如:[616C6B]) * @return String 对应的字符串 */ public static String hexStr2Str(String hexStr) { String str = "0123456789ABCDEF"; char[] hexs = hexStr.toCharArray(); byte[] bytes = new byte[hexStr.length() / 2]; int n; for (int i = 0; i < bytes.length; i++) { n = str.indexOf(hexs[2 * i]) * 16; n += str.indexOf(hexs[2 * i + 1]); bytes[i] = (byte) (n & 0xff); } return new String(bytes); }
运行结果如下图
![](http://static.oschina.net/uploads/space/2016/0318/130414_m3jC_2354306.png)
code下载地址:http://download.csdn.net/detail/pan_shuyang/9465438
相关文章推荐
- 过滤淘宝网弹出窗口
- C#实现简单过滤非法字符实例
- dedecms采集过滤常用代码集合
- C#敏感词过滤实现方法
- 使用位运算实现网页中的过滤、筛选功能实例
- Windows Powershell过滤管道结果
- C#实现过滤sql特殊字符的方法集合
- php下过滤HTML代码的函数
- C#检测是否有危险字符的SQL字符串过滤方法
- asp 过滤非法字符函数
- jQuery内容过滤选择器用法分析
- jquery.fastLiveFilter.js实现输入自动过滤的方法
- JQuery 选择和过滤方法代码总结
- JQuery中基础过滤选择器用法实例分析
- javascript过滤危险脚本方法
- mysql 复制过滤重复如何解决
- PHP实现过滤掉非汉字字符只保留中文字符
- 用php过滤危险html代码的函数
- 探讨如何在Eclipse中过滤版本控制文件.svn
- Python 过滤字符串的技巧,map与itertools.imap