push在发送的时候,有些emoji表情添加不进去,原因是:一个普通中文字符存入数据库时占用3个字节,某些特殊表情会自动占用4个字节,mysql的utf8一个字符最多3字节,而如果要修改为支持4个字节的需要修改数据库配置编码为utf8mb4,但是需要停机重启数据库,由于不能影响线上核心业务,停机成本有点大,所以最终放弃了修改编码的方案。
但是,为了满足运营人员需要发送带有特殊符号的push表情,晚上睡觉想了想一些方案,都是以失败告终,第二天想到了一个比较挫的方案,但的确是实用的,因为那些特殊表情数量可能不大,难道一定要存储到数据库吗,我可以写死在java代码里面啊,果断实践,第二天将知知需要的特殊表情搜集起来,存储在java的一个map中,后台在录入表情的时候,就不粘贴表情符号了,而是输入该特殊表情的替代key,在发送push的时候,就把key替换为真正的表情的value。
测试,上线,问题搞定,该方案的缺点是缺乏灵活的配置性,下次增加新的表情的时候,需要我再次手动添加上去,但不管怎样,总比没有表情要好吧。
1,定义emoji的表情常量类:
package com.taofen8.mobile.constant; import java.util.HashMap; /** * push表情 * 如果数据库的编码修改为utf8mb4,线上要重启才有效果,不然保存某些表情会报错 * 但需要重启数据库,所以放弃修改字符集的方案,把运营需要发push的表情定义在这个类中 * 缺点是:如果运营需要增加表情,需要手动添加到该类中,缺乏灵活的配置性 * @author caofy * */ public class PushBiaoQing { public static HashMap<String, String> map = new HashMap<String, String>(); static{ /** * 主要后面的框框,看上去一样,其实是不同的表情额 */ map.put("#biaoqing_xiangyou#", "拷贝过来的表情"); map.put("#biaoqing_xiangzuo#", "拷贝过来的表情"); map.put("#biaoqing_damuzhi#", "拷贝过来的表情"); map.put("#biaoqing_haode#", "拷贝过来的表情"); map.put("#biaoqing_aixin4#", "拷贝过来的表情"); map.put("#biaoqing_aixin5#", "拷贝过来的表情"); map.put("#biaoqing_free#", "拷贝过来的表情"); map.put("#biaoqing_new#", "拷贝过来的表情"); map.put("#biaoqing_ok#", "拷贝过来的表情"); } }
1,发送push的时候,替换为真正的emoji表情的方法:
private void replaceBiaoQing(List<MobilePushSpecial> list) { if(CollectionUtils.isEmpty(list)){ return; } for(MobilePushSpecial obj : list){ String message = obj.getMessage(); Iterator<Map.Entry<String, String>> iterator = PushBiaoQing.map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next(); String key = entry.getKey(); String value = entry.getValue(); message = message.replaceAll(key, value); } obj.setMessage(message); } }
总结:有时候遇到问题的时候,不要放弃,方法总比苦难多,不要在一个树上吊死,不求技术高深,不管黑猫白猫,能解决业务需求的办法就是好办法。
相关推荐
解决页面添加微信emoji表情保存入库,修改mysql数据库的utf-8编码为utf8mb4编码,采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。
1、开源案例源码,刚好找到,里面自己优化了一下脚本 2、适用于微信登录含有Emoji表情进行处理显示
抖音官方emoji表情,emoji格式为webp。如果需要其他格式可以使用“格式工厂”转换一下。http://www.pcgeshi.com/
使用js处理ios或android输入的emoji表情符号
判断字符串是否包含emoji表情
这是一款高度自定义的emoji表情实现方案
109个微信自带的emoji表情
微信最新Emoji表情149个png打包.zip
oracle不支持emoji表情的直接保存.可通过java解析为emoji字符进行存储.使用时再进行转化使之在移动端以emoji表情正常显示
本工具类包含了Emoji表情的转码和解码 包括了通过url获取文件大小的功能
微信小程序添加emoji表情组件,雪碧图版本
iOS系统风格的Emoji表情图片,图片大小72x72,png后缀,共3184个,Emoji的版本为v13.0。压缩包内提供PHP的使用示例,文档生成于2020年3月2日。
android 输入框EditText禁止输入Emoji表情符,博客地址:http://blog.csdn.net/elsdnwn/article/details/45390771
通用emoji表情包与JSON
Emoji表情全部图片(PNG)资源,总共3175张,尺寸72x72,资源收集于2020年10月6日。
Android Emoji表情开发。两端使同一套的图片,防止两端因为系统内置的Emoji表情不一样,而造成用户体验不一致.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
java处理emoji表情工具类,可完美处理emoji表情。
android仿简单的实现emoji表情功能,可以发送出表情用Textview列表来显示出来。代码简单,拷贝就可以使用
Android 软键盘和emoji表情切换方案,和微信几乎一样的体验,开发环境eclipse。
Java开发,DB为Mysql,版本不详,编码用的是UTF-8,存入Emoji表情时报错如下: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x93' for column 'strValueContent' at row 1 解决方案: