热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

特殊表情存数据库处理

开发途中遇到评价的功能,需要存入表情符号比如:以及这种存入数据库的时候会抛出异常,\x86\啥的百度解决办法是数据库改utf8mb4但是

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

以及这种

存入数据库的时候会抛出异常,\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);}

 


推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
author-avatar
vegg巛iegbaby
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有