java emoji表情存儲(chǔ)的解決方法
1.問題產(chǎn)生情況
我遇到這個(gè)問題是做微信開發(fā)的時(shí)候有些有用的頭像用了微信的emoji表情,然而我的mysql數(shù)據(jù)庫用的編碼是utf8_general_ci,就是utf-8編碼,結(jié)果也就報(bào)錯(cuò)誤了。
2.為什么會(huì)出現(xiàn)這種原因
因?yàn)閙ysql的utf8編碼的一個(gè)字符最多3個(gè)字節(jié),但是一個(gè)emoji表情為4個(gè)字節(jié),所以u(píng)tf8不支持存儲(chǔ)emoji表情。但是utf8的超集utf8mb4一個(gè)字符最多能有4字節(jié),所以能支持emoji表情的存儲(chǔ)。
3.解決方法之一
把你的數(shù)據(jù)庫編碼集設(shè)置為utf8mb4,無論是數(shù)據(jù)庫還是表,還是字段。雖然會(huì)增加存儲(chǔ),但是這個(gè)可以忽略不計(jì)。
4.解決方法之二
有句話說得好,問題來了要么解決要么折中解決。如果有些原因你不能修改數(shù)據(jù)庫編碼之類的,你可以用java的一些插件,如emoji-java這種emoji表情插件對(duì)表情進(jìn)行特殊處理,然后保存或者去掉表情,這也是一種解決方法哦。
5.最后說點(diǎn)什么
通過對(duì)一個(gè)問題不同角度的思考,原來才發(fā)現(xiàn)世界同而不同,不同而同......
最后來段代碼:
import com.github.binarywang.java.emoji.EmojiConverter;
/**
* 表情處理類
* @author Administrator
*
*/
public final class EmojiUtil {
private static EmojiConverter emojiConverter = EmojiConverter.getInstance();
/**
* 將emojiStr轉(zhuǎn)為 帶有表情的字符
* @param emojiStr
* @return
*/
public static String emojiConverterUnicodeStr(String emojiStr){
String result = emojiConverter.toUnicode(emojiStr);
return result;
}
/**
* 帶有表情的字符串轉(zhuǎn)換為編碼
* @param str
* @return
*/
public static String emojiConverterToAlias(String str){
String result=emojiConverter.toAlias(str);
return result;
}
}
使用的框架是:
<dependency> <groupId>com.github.binarywang</groupId> <artifactId>java-emoji-converter</artifactId> <version>0.0.1</version> </dependency>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java emoji持久化mysql過程詳解
- 讓Java后臺(tái)MySQL數(shù)據(jù)庫能夠支持emoji表情的方法
- java數(shù)據(jù)庫唯一id生成工具類
- sqlite數(shù)據(jù)庫的介紹與java操作sqlite的實(shí)例講解
- Java使用JDBC連接postgresql數(shù)據(jù)庫示例
- java使用influxDB數(shù)據(jù)庫的詳細(xì)代碼
- Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法
- java處理數(shù)據(jù)庫不支持的emoji表情符問題解決
相關(guān)文章
Java中使用Lambda表達(dá)式和函數(shù)編程示例
這篇文章介紹了Java中使用Lambda表達(dá)式和函數(shù)編程示例,該文章會(huì)演示多個(gè)示列,分別是變量聲明上下文中的lambda、return語句上下文中的lambda、賦值上下文中的lambda、lambda在數(shù)組初始值設(shè)定項(xiàng)上下文中的用法等等,需要的朋友可以參考一下2021-10-10
初探Spring Cloud Gateway實(shí)戰(zhàn)
這篇文章主要介紹了創(chuàng)建網(wǎng)關(guān)項(xiàng)目(Spring Cloud Gateway)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-08-08
MybatisPlus的MetaObjectHandler與@TableLogic使用
這篇文章主要介紹了MybatisPlus的MetaObjectHandler與@TableLogic使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Spring security如何實(shí)現(xiàn)記錄用戶登錄時(shí)間功能
這篇文章主要介紹了Spring security如何實(shí)現(xiàn)記錄用戶登錄時(shí)間功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Feign如何設(shè)置超時(shí)時(shí)間(不同情況)
本文主要介紹了Feign的超時(shí)時(shí)間設(shè)置,包括單獨(dú)使用Feign和在SpringCloud環(huán)境下的設(shè)置方式,以及與Ribbon和Hystrix的配合使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
java實(shí)現(xiàn)在復(fù)制文件時(shí)使用進(jìn)度條(java實(shí)現(xiàn)進(jìn)度條)
在對(duì)大文件操作時(shí),可能會(huì)需要些時(shí)間,此時(shí)為用戶提供進(jìn)度條提示是非常常見的一項(xiàng)功能,這樣用戶就可以了解操作文件需要的時(shí)間信息。本實(shí)例為大家介紹了在復(fù)制大的文件時(shí)使用的進(jìn)度條提示,需要注意的是,只有在讀取文件超過2秒時(shí),才會(huì)顯示進(jìn)度條2014-03-03

