Javaemoji持久化mysql的過程

本篇內(nèi)容主要講解“Javaemoji持久化MySQL的過程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Javaemoji持久化mysql的過程”吧!

創(chuàng)新互聯(lián)建站2013年至今,先為鄄城等服務(wù)建站,鄄城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鄄城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

1、既然是由于移動端的表情符號占位是4個字節(jié),那我們直接把數(shù)據(jù)轉(zhuǎn)換后保存。

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

使用指定的編碼機(jī)制將字符串轉(zhuǎn)換為 application/x-www-form-urlencoded 格式

URLDecoder.decode(String s, String enc)

使用指定的編碼機(jī)制對 application/x-www-form-urlencoded 字符串解碼。

2、方法一的處理太粗躁,有沒有更好的解決辦法呢?使用輕量級工具emoji-java處理emoji表情字符

3、有了上面兩種方式,你是不是已經(jīng)滿足了,最為自己最推崇的emoji處理方式,下面才是重點(diǎn),首先說一下上面兩種方式存在的問題:第一種方式,數(shù)據(jù)經(jīng)過轉(zhuǎn)換,相當(dāng)于加密,我們將無法直接查看到數(shù)據(jù)的原始內(nèi)容,由其對于需要進(jìn)行搜索的業(yè)務(wù)場景,將是一件很困難的事情;第二種方式,雖然避免了第一種方式存在的問題,但是它基于表情的對照表進(jìn)行匹配轉(zhuǎn)換的,也就意味著對于一些新表情,無法做到轉(zhuǎn)換,這就會導(dǎo)致我們數(shù)據(jù)插入繼續(xù)出現(xiàn)問題,這是它第一個問題,第二點(diǎn)在于它將表情轉(zhuǎn)化為對應(yīng)的匹配規(guī)則,說白一點(diǎn)就是轉(zhuǎn)化為英文描述,就是這個轉(zhuǎn)化,原本4個字節(jié)的表情,它可能給你轉(zhuǎn)成了10個字節(jié)甚至更多。好了說了這么多下面我們看一下我最后的終極解決方法:

/** * @Author: gaoshang * @Description: * @Date: 2019/7/19 */public class EmojiUtil { /**  * 將文本中的表情轉(zhuǎn)為十六進(jìn)制  * <p>  *  * @param input  * @return  */ public static String parseFromAliases(String input) {  if (input == null) {   return input;  }  return stringToUnicode(input); } /**  * 將文本中的十六進(jìn)制轉(zhuǎn)為表情  * <p>  *  * @param input  * @return  */ public static String parseToAliases(String input) {  if (input == null) {   return input;  }  return unicodeToString(input); } /**  * 字符串轉(zhuǎn)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轉(zhuǎn)字符串  *  * @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的過程”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前標(biāo)題:Javaemoji持久化mysql的過程
轉(zhuǎn)載注明:http://bm7419.com/article4/iihpie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、App開發(fā)虛擬主機(jī)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管