特殊表情存数据库处理

开发途中遇到评价的功能,需要存入表情符号比如:

以及这种

存入数据库的时候会抛出异常,\x86\啥的

百度解决办法是 数据库改utf8mb4  但是测试改表的字符集并没有用,

然后我也没敢改库的字符集仍然使用utf8

我的解决办法是代码层面的处理,进行URLEncoder转码 和URLEncoder 解码:

/*** @Description emoji表情转换* @param str 待转换字符串* @return 转换后字符串* @throws UnsupportedEncodingException*/public static String emojiConvertToUtf(String str)throws UnsupportedEncodingException {String patternString = "([\\x{10000}-\\x{10ffff}\ud800-\udfff])";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(str);StringBuffer sb = new StringBuffer();while (matcher.find()) {try {matcher.appendReplacement(sb,"[[" + URLEncoder.encode(matcher.group(1),"UTF-8") + "]]");} catch (UnsupportedEncodingException e) {throw e;}}matcher.appendTail(sb);log.info("emoji表情转字符串:"+sb.toString());return sb.toString();}/*** @Description 还原emoji表情的字符串** @param str 转换后的字符串* @return 转换前的字符串* @throws UnsupportedEncodingException*/public static String utfemojiRecovery(String str)throws UnsupportedEncodingException {String patternString = "\\[\\[(.*?)\\]\\]";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(str);StringBuffer sb = new StringBuffer();while (matcher.find()) {try {matcher.appendReplacement(sb,URLDecoder.decode(matcher.group(1), "UTF-8"));} catch (UnsupportedEncodingException e) {throw e;}}matcher.appendTail(sb);log.info("字符串转emoji表情:"+sb.toString());return sb.toString();}

注意:

测试时在对象get set方法上转码 解码,存入数据库仍然是失败的

大概是因为mybatis的insert 和 update方法 mapper快捷方法实际处理时仍存入的未转码的

所以在业务代码上进行转码解码的:

 /*** 转码  解决表情问题*/try {evaluateContent = StringUtil.emojiConvertToUtf(evaluateContent);} catch (UnsupportedEncodingException e) {throw new BusinessException(CommonErrorCode.E_102906);}

 

 /*** 解码*/try {evaluateContent = StringUtil.utfemojiRecovery(evaluateContent);} catch (UnsupportedEncodingException e) {throw new BusinessException(CommonErrorCode.E_102906);}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转 【MQTT】在Windows下搭建MQTT服务器

MQTT简介 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。该协议的特点有: 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。…

记录一次StackOverflowError问题

StackOverflowError Idea启动一直抛出StackOverflowError栈溢出,大概率是跟刚写的代码相关 public class WebServiceConfig {private static WebServiceConfig cfg new WebServiceConfig();// Web服务的URLprivate String address;// Web服务接口private Class s…

多数据源处理-苞米豆-dynamic

微服务项目虽然每个服务可以单独使用一个库,但是某些特定服务,如调度中心服务,定时任务等,如果还是使用rpc或者fegin频繁进行远程调用,总感觉不是很合适 所以对单服务进行了多数据源处理 使用的是苞米豆的 dynamic-d…

Druid的外网访问异常

本地启动访问无异常,部署至Linux服务器后无法访问 #合并多个DruidDataSource的监控数据use-global-data-source-stat: truestat-view-servlet:login-username: adminlogin-password: adminreset-enable: falseurl-pattern: /druid/*# 添加IP白名单allow: "&quo…

Linux项目第一次访问非常慢,后来很快的异常

最近项目本地访问和测试服务器访问都没出现访问很慢的问题。 近期要上生产部署,所以对生产环境的组件及各服务进行了部署,部署完成后进行测试发现请求耗时异常 比如一个订单查询请求,第一次请求耗时5m 或者15s 而且很有规律,不多…

spring注解大全

【转载】https://www.cnblogs.com/zxf330301/articles/6559210.html spring component的作用 1、controller 控制器(注入服务) 2、service 服务(注入dao) 3、repository dao(实现dao访问) 4、component &am…

Flink1.12.0使用过程中遇到的异常

1.Record has Long.MIN_VALUE timestamp ( no timestamp marker). Is the time characteristic set to ProcessingTime, or did you forget to call DataStream.assignTimestampsAndWatermarks(...)? 解决办法: 时间窗口事件选择此方法,Time导包也需要…

多个字段条件相同进行分组并过滤拼装SQL

select posts,term,user_name,GROUP_CONCAT(put_department) put_dept from hrbp_info group by posts,term,user_name having count(*)>1

一道清华期中考试题(逃)

据出题的jzh老师所说... 求和【问题描述】组合数 C(n,m)是从 n 个物品中取 m 个的方案数。C(n,m)(n!)/(m!(n-m)!)斐波那契数列 F 满足, F[0]F[1]1, n≥2 时 F[n]F[n-1]F[n-2]给出 n,求 C(n,0)F[0]C(n,1)F[1]…C(n,n)F[n]【输入格式】一行一个…

记录docker-Skywalking集成es7异常处理

遇到的问题: es7容器启动成功 skywalking的oap容器启动一直在restart 启动失败 处理过程: 1.docker logs oap容器ID 2.对应处理解决 PUT http://192.168.1.10:9200/_cluster/settings { “transient”: { “cluster”: { “max_shards_per_node”:1…

第十周补做作业

第十周课下补做作业 相关知识点的总结 Comparable接口:如果链表中存放的对象不是字符串数据,那么创建对象的类必须实现Comparable接口,即实现该接口中的方法int compareTo(Object b)来规定对象的大小关系。也就是让待排序对象所在的类实现Com…

PyCharm安装与配置,python的Hello World

1. 访问https://www.jetbrains.com/zh/pycharm/download/download-thanks.html, 下载pycharm 安 装包,点击安装. 2. 用记事本打开hosts文件,Windows系统hosts文件路径为:c:\windows\system32\drivers\etc,将0.0.0.0 account.jetbrains.com添加到hosts文件最后 3.打开…

Linux下从零开始部署和使用Jaeger

最近在折腾Jaeger,Jaeger官网都是介绍如何通过Docker部署,二进制部署文档基本没有(已咨询过作者,作者说没文档!你参考Docker自己部署好了!!!),所以打算写一篇…

python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)...

先来回顾一下昨天的内容 黏包现象粘包现象的成因 :   tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制   无边界 所有在连接建立的基础上传递的数据之间没有界限   收发消息很有可能不完全相等   缓存机制,导致没发过去的消息会在…

Python中xPath技术和BeautifulSoup的使用

xpath基本知识 XPath语法:使用路径表达式来选取XML或HTML文档中的节点或节点集 路径表达式 nodename:表示选取此节点的所有子节点 / : 表示从根节点选取 // :选择任意位置的某个节点。 . :选取当前节点 .. :选…

div水平垂直居中的六种方法

在平时,我们经常会碰到让一个div框针对某个模块上下左右都居中(水平垂直居中),其实针对这种情况,我们有多种方法实现。 方法一: 绝对定位方法:不确定当前div的宽度和高度,采用 transform: trans…

Redis集群监控及Redis桌面客户端

之前在生产环境部署了Redis集群,一直苦于没有工具监控,最近找了下网上推荐redmon和Redislive的比较多,查看了两个项目的github,都几年没有更新,这两个项目应该没有人在维护了,如果哪位有更好的替代方案麻烦告知&#x…

GIT安装部署

git git简介 Git不仅是一款开源的分布式版本控制系统,而且有其独特的功能特性,例如大多数的分布式版本控制系统只会记录每次文件的变化,说白了就是只会关心文件的内容变化差异,而Git则是关注于文件数据整体的变化,直接…

牛客网Wannafly挑战赛15 B车辆安排(模拟)AND C 出队(规律)

传送门 :B题:点我 C题: 点我 题目描述 有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数 输入描述: 第一行n第二行n个数,表示每个队…

5-12

1,每个递归函数都有两部分,基线条件和递归条件 base case and recursive case 2,调用一个函数的时候,其他的函数调用会暂停并处于未完成的状态 3.调用栈会消耗大量的内存,栈很高的时候意味着计算机要存储大量的函数调用信息,此时的…