文档章节

Emoji表情过滤

Panshuyang
 Panshuyang
发布于 2016/03/18 13:07
字数 476
阅读 305
收藏 3

首先,看一下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);  
    }

运行结果如下图

code下载地址:http://download.csdn.net/detail/pan_shuyang/9465438

© 著作权归作者所有

Panshuyang
粉丝 0
博文 12
码字总数 6017
作品 0
武汉
私信 提问
mysql 插入emoji表情的时候报错问题。(苹果手机)

一、问题现象 保存微信用户昵称到数据库,ios用户的昵称包含表情,插入数据库出错。 二、分析 使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错。 原因是...

艺晨光
2016/08/09
0
0
mysql存储 微信昵称(含有emoji表情) 报错 解决

做的项目,涉及到存储微信昵称、emoji表情,发现这个坑, emoji表情、微信昵称存储mysql到utf-8字段必须要做一下处理。 emoji表情是用4个字节编码,蛋疼的mysql版本默认varchar字段属于utf-8...

Code辉
2018/10/09
170
0
emoji表情过滤处理

微信消息接口开发时,消息体包含emoji表情时,不考虑存储emoji表情,可使用preg_replace函数过滤替换,PHP如下: PS:消息体里的基本表情代码前台可以用js匹配替换为表情图片显示...

chorigin
2016/11/16
264
0
苹果向开发者发布第四个 iOS 8.3 测试版

苹果今天向开发者发布了第四个 iOS 8.3 测试版,距离 iOS 8.3 第三个测试版发布相隔两周时间。距离 iOS 8.3 第一个测试版发布相隔一个半月时间。iOS 8.3 beta 4 的编译号为 12F5061,开发者可...

oschina
2015/03/25
690
0
如何处理网站的富文本问题?

Dear All, 我现在这边一直有个问题, 自己尝试了一段时间, 总是没有找到一个很好的办法, 就是关于富文本处理的流程. 用户的输入->服务端的过滤->DB数据库存储->页面的展示, 每一步怎么做. 我自...

陈袁at互联
2013/12/31
149
1

没有更多内容

加载失败,请刷新页面

加载更多

可能是国内第一篇全面解读 Java 现状及趋势的文章

作者 | 张晓楠 Dragonwell JDK 最新版本 8.1.1-GA 发布,包括全新特性和更新! 导读:InfoQ 发布《2019 中国 Java 发展趋势报告》,反映 Java 在中国发展的独特性,同时也希望大家对 Java 有...

阿里云官方博客
11分钟前
2
0
Spring Boot 2.x基础教程:Swagger静态文档的生成

前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了。如果您还不熟悉这块,可以先阅读: Spring Boot 2.x基础教程...

程序猿DD
14分钟前
2
0
《毅力》读书笔记

1.确信你全身心地投入 2.准备好为目标进行艰难的跋涉 3.通过减少需要使用毅力的情形,为将来的挑战做好准备 4.尽可能具体细致地确定你的目标和实现目标的过程 5.把挑战分解为小而易于管理的小...

lingch
15分钟前
3
0
zk中快速选举FastLeaderElection实现

选举涉及概念 服务器状态 投票 如何选择投票? 协议 选举 如何进行选举? epoch 发送者 接收者 发送队列 接收队列 服务器状态 public enum ServerState { LOOKING,寻找Leader状态,当服务处于...

writeademo
18分钟前
2
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

Linux就该这么学
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部