在开发聊天软件相关的时候遇到emoji表情

在聊天软件,如微信,在请求好友昵称的时候,经常会遇到emoji格式的表情头像,通常我们冲后台获取到的字符串都是<span class=\"emoji emoji2122\"></span> 这样一个格式,

怎么在textview中显示出emoji表情呢?

其实很简单,我们把对应的emoji的值取出来,转换为16进制的值,直接给textview,textview就可以直接识别出来,不同版本识别的emoji是有区别的,最直接的就是android和ios。

可以直接复制EmojiUtils,调用convert就可以了,这个方法会把nickname中的emoji过滤,返回一个替换掉span的字符串回来。但是需要注意有些特殊的emoji表情是两个emoji值表示出来的,不同版本显示会有所不同。

public class EmojiUtils {    public static final String EMOJI_PATTERN =            "<span\\s+class\\s*=\\s*\\\\?\"emoji emoji(\\p{XDigit}+)\\\\?\"></span>";

public static String convert(String orignalName) {        if (orignalName == null || orignalName.isEmpty()) {            return orignalName;        }        Pattern p = Pattern.compile(EMOJI_PATTERN);        Matcher matcher = p.matcher(orignalName);        StringBuffer buffer = new StringBuffer();        while (matcher.find()) {            String emojiCode = matcher.group(1);            matcher.appendReplacement(buffer, getReplacement(emojiCode));        }        matcher.appendTail(buffer);        return buffer.toString();    }

private static String getReplacement(String emojiCode) {        int length = emojiCode.length();        String replacement = "?";        if (length == 4 || length == 5) {            replacement = emojiCodeToUnicode(emojiCode);        } else if (length == 6 || length == 8) {            if (length == 6) {                String start = emojiCodeToUnicode(emojiCode.substring(0, 2));                String end = emojiCodeToUnicode(emojiCode.substring(2, 6));                replacement = start + end;            } else {                String start = emojiCodeToUnicode(emojiCode.substring(0, 4));                String end = emojiCodeToUnicode(emojiCode.substring(4, 8));                replacement = start + end;            }

} else if (length == 10) {            String start = emojiCodeToUnicode(emojiCode.substring(0, 5));            String end = emojiCodeToUnicode(emojiCode.substring(5, 10));            replacement = start + end;        }        return replacement;

}

private static String emojiCodeToUnicode(String emojiCode) {        return new String(Character.toChars(Integer.parseInt(emojiCode, 16)));    }}
时间: 2024-10-31 09:19:18

在开发聊天软件相关的时候遇到emoji表情的相关文章

轻松处理PHP开发中微信emoji表情mysql存储的问题

背景 做微信开发的时候发现,微信支持emoji表情做昵称,结果考虑不周 Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.有的根本插入是失败,原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了. 这要怎么办呢? 第一种方案: 如果你已经有很多数据了就不要修改字符集了因为会造成乱码情况你可以干掉他或者表情替换成*** $result['nickname'] = preg_repla

简易视频聊天软件的快速开发(QT5.3)

为了在linux平台下快速开发一款视频聊天软件,本文选取了AnyChat SDK作为核心开发,开发环境使用QT5.3,下面将讲解我的开发过程. 一.      开发环境的搭建 1.           首先,虚拟机安装linux系统,我选取的是最新的Ubuntu14.04-32bit : 2.           然后,到QT官网http://qt-project.org/downloads,下载最新的linux版本QT5.3.2,如下所示: 3.            最后,到AnyChat官

高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输入时显示一个提示字符串.由于Background对ComboBox无效,所以直接通过Background来实现是不行了.需要重新写ComboBox的模板,也就是Template,自定义一个模板来实现这个结果.又看了一下QQ的下拉框,这玩意不自定义也难以实现,所以就干脆自定义了. 先上代码,先是Com

Python开发双工聊天软件

需求: 1.用Socket开发双工聊天软件,服务端与客户端交互 2.聊天记录要记录到MySQL数据库 3.客户端可以查看聊天记录 4.用三层架构开发 程序架构 各文件作用解析 - model              model层 - dialogue.py        dialoue表 - users.py          users表 - utility             公共层 - sql_helper.py       公共配置文件 - client.py         客户

高仿QQ即时聊天软件开发系列之二登录窗口界面

继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因为我没玩过WPF所以难,因为感觉做出来之后也就那样 整体布局 整体是上下分,下面是左中右分 1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="27"><!--用于放窗口右上角关闭.最

用C/S技术开发语音聊天软件有什么特点?

上一期我们说过B/S技术开发聊天有什么优点,这一期我们就来简单的说说用C/S技术开发又有什么特点? 一.稳定性和灵活性:用C/S技术可以将应用和服务进行分离. 二.安全性:C/S对应是的是结构模式,一般只适用于局域网,所以安全性比较好. 三.速度快:客户端与服务器端是直接连接的,中间没有经过别的环节,所以响应速度非常快. 四.升级维护复杂:如果软件需要升级维护,那么每一台客户的机子都要进行相应的升级维护服务,那么这个过程肯定是比较繁琐的. 综上所述,对于不同的聊天室需要采用不同的开发技术,但是国

区块链聊天软件社交IM及时通讯app开发

区块链落地应用中,少不了区块链聊天软件社交app.传统社交聊天工具的痛点可以使用区块链技术落地解决.比如聊天内容不存在私密性,会因为涉及宗教.政治而被封或删除.并且用户的信息泄露非常严重,用户的个人信息经常被多次贩卖,打扰到用户的日常生活. 区块链聊天社交软件的特点: 1.言论自由,不用担心被平台影响.不存在第三方监管问题. 2.对接数字资产,闪兑等区块链应用功能. 3.可以用数字资产打赏文章,朋友圈. 区块链与社交领域结合的模式有: ①运用区块链技术建立去中心化的社交生态,并及数字资产钱包.交

仿QQ聊天软件2.0版

仿QQ聊天软件2.0版 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907     上次课设做了Java版的仿QQ聊天程序,这次软件实训,我们继续完善了仿QQ聊天程序,将上次未完成及不完善的地方进行完善和改进,还新加了部分功能:表情输入.气泡模式.文件传输.截屏.语音聊天.逐步向QQ的基本功能靠齐.通过这次软件实训,又有了很多收获. 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本功能和QQ类似.首先,

python练习四—简单的聊天软件

python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用户的会话列表 * 维护一个已登录用户的字典,用户名和会话 * 监听端口,接受会话,并启动一个ChatSession处理 2. 会话线程 * 初始化一个接收数据缓冲区 * 处理用户输入的命令,并提醒用户先登录(也就是说目前指处理登陆命令) * 将用户输入的数据加入缓冲区 * 用户一次输入结束后,将缓冲