温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Javaemoji持久化mysql的过程

发布时间:2021-09-01 07:48:45 来源:亿速云 阅读:123 作者:chen 栏目:编程语言

本篇内容主要讲解“Javaemoji持久化mysql的过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javaemoji持久化mysql的过程”吧!

1、既然是由于移动端的表情符号占位是4个字节,那我们直接把数据转换后保存。

1.URLEncoder.encode(String s, String enc)

使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式

URLDecoder.decode(String s, String enc)

使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。

2、方法一的处理太粗躁,有没有更好的解决办法呢?使用轻量级工具emoji-java处理emoji表情字符

3、有了上面两种方式,你是不是已经满足了,最为自己最推崇的emoji处理方式,下面才是重点,首先说一下上面两种方式存在的问题:第一种方式,数据经过转换,相当于加密,我们将无法直接查看到数据的原始内容,由其对于需要进行搜索的业务场景,将是一件很困难的事情;第二种方式,虽然避免了第一种方式存在的问题,但是它基于表情的对照表进行匹配转换的,也就意味着对于一些新表情,无法做到转换,这就会导致我们数据插入继续出现问题,这是它第一个问题,第二点在于它将表情转化为对应的匹配规则,说白一点就是转化为英文描述,就是这个转化,原本4个字节的表情,它可能给你转成了10个字节甚至更多。好了说了这么多下面我们看一下我最后的终极解决方法:

/** * @Author: gaoshang * @Description: * @Date: 2019/7/19 */public class EmojiUtil { /**  * 将文本中的表情转为十六进制  * <p>  *  * @param input  * @return  */ public static String parseFromAliases(String input) {  if (input == null) {   return input;  }  return stringToUnicode(input); } /**  * 将文本中的十六进制转为表情  * <p>  *  * @param input  * @return  */ public static String parseToAliases(String input) {  if (input == null) {   return input;  }  return unicodeToString(input); } /**  * 字符串转unicode  *  * @param str  * @return  */ public static String stringToUnicode(String str) {  StringBuilder sb = new StringBuilder();  StringBuilder cacheSB = new StringBuilder();  char[] c = str.toCharArray();  for (int i = 0; i < c.length; i++) {   if (!isEmojiCharacter(c[i])) {    if (cacheSB.length() > 0) {     sb.append("\\u").append(cacheSB);     cacheSB.delete(0, cacheSB.length());    }    sb.append("\\u").append("[").append(Integer.toHexString(c[i])).append("]");   } else {    if (c[i] == '[' || c[i] == '\\' || c[i] == ']') {     if (cacheSB.length() > 0) {      sb.append("\\u").append(cacheSB);      cacheSB.delete(0, cacheSB.length());     }     sb.append("\\u").append(c[i]);    } else {     cacheSB.append(c[i]);    }   }  }  if (cacheSB.length() > 0) {   if (sb.length() > 0) {    sb.append("\\u");   }   sb.append(cacheSB);  }  return sb.toString(); } /**  * unicode转字符串  *  * @param unicode  * @return  */ public static String unicodeToString(String unicode) {  StringBuilder sb = new StringBuilder();  String[] hex = unicode.split("\\\\u");  for (int i = 0; i < hex.length; i++) {   if (hex[i].indexOf("[") == 0 && hex[i].indexOf("]") == hex[i].length() - 1) {    try {     int index = Integer.parseInt(hex[i].substring(1, hex[i].length() - 1), 16);     sb.append((char) index);    } catch (NumberFormatException e) {     sb.append(hex[i]);    }   } else {    sb.append(hex[i]);   }  }  return sb.toString(); } private static boolean isEmojiCharacter(char codePoint) {  return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)    || (codePoint == 0xD)    || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))    || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))    || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)); }}

到此,相信大家对“Javaemoji持久化mysql的过程”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI