Java中解决app传的emoji表情的多种方式

今天项目遇到的一个问题,APP订单评论提交emoji表情的话会报错,由于需要实现emoji表情评论的功能,根据自己实现的方式以及查询的实现方式,现总结为一下几种

mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。

实现方式一

对APP传入后端的数据包括字符串和emoji表情,把emoji表情和String都进行Base64转换,存储在数据库中,取的时候再转换回来即可解决上述问题,这是最快也是最简单的解决方法。

1、最适合应用场景:

h5或者android开发中通常会遇到一种场景,当用手机输入法输入Emoji表情符的时候,由于数据库不支持,保存时这些表情符号就会被过滤掉以至于无法显示,android和h5开发中可以使用Base64算法解决这个问题。

2、使用工具:

使用Apache commons codec 类Base64

3、引入jar包:

加入jar包依赖(如果是maven项目就直接在pom文件中加入下边内容,若不是就加入对应jar包)


<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.6</version>
</dependency>


4、加密解密实现:



 
 
  1. import org.apache.commons.codec.binary.Base64;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import java.io.UnsupportedEncodingException;
  5. /**
  6. * 将String类型的字符串进行base64编码与解码,使用utf-8
  7. */
  8. public class Base64Util {
  9. private static final Logger logger = LoggerFactory.getLogger(Base64Util.class);
  10. /**
  11. * 对给定的字符串进行base64加密
  12. */
  13. public static String encodeData(String inputData) {
  14. try {
  15. if ( null == inputData) {
  16. return null;
  17. }
  18. return new String(Base64.encodeBase64(inputData.getBytes( "utf-8")), "utf-8");
  19. } catch (UnsupportedEncodingException e) {
  20. logger.error(inputData, e);
  21. }
  22. return null;
  23. }
  24. /**
  25. * 对给定的字符串进行base64解密
  26. */
  27. public static String decodeData(String inputData) {
  28. try {
  29. if ( null == inputData) {
  30. return null;
  31. }
  32. return new String(Base64.decodeBase64(inputData.getBytes( "utf-8")), "utf-8");
  33. } catch (UnsupportedEncodingException e) {
  34. logger.error(inputData, e);
  35. }
  36. return null;
  37. }
  38. }


实现方式二

mysql 字符集utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。只要修改mysql数据库的编码格式变为utf8mb4即可
具体方法可参考连接
这种方式后台不用再做额外的操作,直接正常存储即可,但是修改数据库会比较麻烦

实现方式三

通过emoji-Java解决数据库不能存储4字节表情符号
参考这篇文章,这里不再叙述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值