本篇內(nèi)容主要講解“Javaemoji持久化MySQL的過(guò)程”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Javaemoji持久化mysql的過(guò)程”吧!
創(chuàng)新互聯(lián)建站2013年至今,先為鄄城等服務(wù)建站,鄄城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鄄城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1、既然是由于移動(dòng)端的表情符號(hào)占位是4個(gè)字節(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ī)制對(duì) application/x-www-form-urlencoded 字符串解碼。
2、方法一的處理太粗躁,有沒(méi)有更好的解決辦法呢?使用輕量級(jí)工具emoji-java處理emoji表情字符
3、有了上面兩種方式,你是不是已經(jīng)滿足了,最為自己最推崇的emoji處理方式,下面才是重點(diǎn),首先說(shuō)一下上面兩種方式存在的問(wèn)題:第一種方式,數(shù)據(jù)經(jīng)過(guò)轉(zhuǎn)換,相當(dāng)于加密,我們將無(wú)法直接查看到數(shù)據(jù)的原始內(nèi)容,由其對(duì)于需要進(jìn)行搜索的業(yè)務(wù)場(chǎng)景,將是一件很困難的事情;第二種方式,雖然避免了第一種方式存在的問(wèn)題,但是它基于表情的對(duì)照表進(jìn)行匹配轉(zhuǎn)換的,也就意味著對(duì)于一些新表情,無(wú)法做到轉(zhuǎn)換,這就會(huì)導(dǎo)致我們數(shù)據(jù)插入繼續(xù)出現(xiàn)問(wèn)題,這是它第一個(gè)問(wèn)題,第二點(diǎn)在于它將表情轉(zhuǎn)化為對(duì)應(yīng)的匹配規(guī)則,說(shuō)白一點(diǎn)就是轉(zhuǎn)化為英文描述,就是這個(gè)轉(zhuǎn)化,原本4個(gè)字節(jié)的表情,它可能給你轉(zhuǎn)成了10個(gè)字節(jié)甚至更多。好了說(shuō)了這么多下面我們看一下我最后的終極解決方法:
/** * @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)); }}
到此,相信大家對(duì)“Javaemoji持久化mysql的過(guò)程”有了更深的了解,不妨來(lái)實(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的過(guò)程
轉(zhuǎn)載注明:http://aaarwkj.com/article4/iihpie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站內(nèi)鏈、標(biāo)簽優(yōu)化、App開(kāi)發(fā)、虛擬主機(jī)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)