字符串中Emoji表情处理(博客园迁移)
来源:互联网 发布:coc淘宝买宝石安全吗 编辑:程序博客网 时间:2024/06/02 00:24
吃了经验的亏,因为Emoji表情引起的项目bug被撸主遇到两次了,总有一些调皮的小朋友爱用表情来搞点事。第一次把当时那个表改为utf8mb4解决了,第二次说啥都不好使。网上找了半天,发现好多人不去实验一下就复制别人的代码网上发,然后导致我拿来用直接不行。最后一遍遍尝试终于解决了,防止以后再出错,总结下吧。
我们的MYSQL数据库普遍用的字符集是UTF-8,默认情况下是utf8_general_ci,这种字符集下,默认是支持1-3字节的编码,当然这对字母,汉字都是没啥问题的。但是对手机带的Emoji表情级不行了,因为它是4个字节的。
这里介绍处理的一些办法吧,主要有两个:
第一,修改数据库字符集:
这种方法需要的硬性要求就是你的mysql数据库版本5.5以后的。一般有数据库管理工具的,直接打开改了就是了,比如我用的HeidiSQL,直接把表改为utf8mb4就可以了。如图:在默认字符集那里调整就可以了。
这种方法简单省事,但是可能需要重启数据库。还有个问题是,有时候这方法不太灵,我第一次用这个方法,完美解决的问题,但是第二次,说啥都不好使。所以,这种方式还是不推荐了。
第二,将这些表情过滤掉
既然数据库不能保存,那就直接把这些表情过滤掉好了。这种情况是损坏客户的个性而让服务更便捷的一张方式。目前很多网站就是这么干的,毕竟效率是关键,你这表情即便保存了,也说不定哪里再次用到,展示不了。
过滤这种事,简直太多坑,比如,我尝试了很多次的这种代码:
撸主曾经十分坚信这就是最接近答案能解决表情问题的代码,即便不能,给他稍微改改就可以了。但是经过好多次,无论怎么搞,所有的字母和汉字全部都会给过滤成表情,最终还是没解决。哎,还是太年轻。
结果没办法,再去找别的代码,于是,碰到了正确的,也是目前最推荐的答案:
/** * emoji表情替换 * * @param source 原字符串 * @param slipStr emoji表情替换成的字符串 * @return 过滤后的字符串 */ public static String filterEmoji(String source,String slipStr) { if(StringUtils.isNotBlank(source)){ return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", slipStr); }else{ return source; } }
建议做成工具方法,方便实用,亲测可行。
- 字符串中Emoji表情处理(博客园迁移)
- 字符串中Emoji表情处理
- java字符串中Emoji表情处理
- 计算字符串长度(处理emoji表情)
- java字符串Emoji表情的处理
- 判断字符串中是否包含emoji表情
- 判断字符串中是否包含emoji表情
- 判读字符串中是否含有Emoji表情
- 评论页面表情处理(emoji)
- andoid emoji表情处理
- 处理Emoji表情(unicode)
- emoji表情处理
- php emoji表情处理
- Emoji表情处理
- Emoji表情后台处理
- java处理emoji表情
- golang emoji表情处理
- 判断字符串中是否含有emoji表情,并将emoji表情替换成其他字符串
- 广度优先搜索算法
- 2
- 使用jquery.autocomplete.js插件实现自动补全进行查询
- React-navigation导航系统(5)-Router
- tomcat配置问题
- 字符串中Emoji表情处理(博客园迁移)
- 图的邻接表建立以及DFS和BFS
- JS HTML5事件
- React-navigation导航系统(6)-Views
- Centos 7.0设置/etc/rc.local无效问题解决
- java并发编程实践之对象的共享
- com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize out of START_ARRAY token
- <<Linux内核设计与实现>>读书笔记(六)-内核数据结构
- mybatis <forEach>标签的使用