日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

前言

Emoji 在我們生活中真的是越來(lái)越常見(jiàn)了,幾乎每次發(fā)消息的時(shí)候不帶個(gè) Emoji,總覺(jué)得少了點(diǎn)什么,似乎干巴巴的文字已經(jīng)無(wú)法承載我們豐富的感情了。對(duì)于我們開(kāi)發(fā)者來(lái)說(shuō),如何將 Emoji 存入 MySQL 數(shù)據(jù)庫(kù)或者取出來(lái),就變成了一種必須掌握的技能了。

Emoji 是一種圖形符號(hào),能夠很直觀地反應(yīng)出某種文字含義。它讓我想起遠(yuǎn)古時(shí)代的象形文字。

mysql庫(kù)不能修改為utf8mb4編碼,但又想存emoji表情怎么辦?

 

Emoji 其實(shí)是一個(gè)日語(yǔ)詞(えもじ),E 表示"絵",moji 表示"文字";連在一起就是"絵文字",可以更形象化地表情達(dá)意。

糟糕

如果我們直接將 Emoji 表情存入數(shù)據(jù)庫(kù)的話,通常會(huì)出現(xiàn)下面這個(gè)錯(cuò)誤。

mysql庫(kù)不能修改為utf8mb4編碼,但又想存emoji表情怎么辦?

 

因?yàn)閿?shù)據(jù)庫(kù)的字符編碼一般是 utf8(支持的編碼范圍為 \u0000-\uFFFF),而 Emoji 所在的編碼范圍是 \u1F601-\u1F64F,超出 MySql 的邊界了。

怎么解決這個(gè)問(wèn)題呢?

utf8mb4

可以將 MySql 的字符集由 utf8 調(diào)整為 utf8mb4。utf8mb4 是 MySql 在 5.5.3 版本之后增加的一個(gè)編碼方式,用來(lái)兼容四字節(jié)的 Unicode(包括 Emoji)。

理論上,utf8mb4 是 utf8 的超集,其中 mb4 是 most bytes 4 的意思,將字符集修改為“utf8mb4”,并不會(huì)對(duì)已有的 utf8 編碼讀取產(chǎn)生任何問(wèn)題。

但通常這種方式并不是最優(yōu)解,因?yàn)閼?yīng)用層還需要將 MySql 的連接方式作出以下調(diào)整:

jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8mb4&useSSL=false&zeroDateTimeBehavior=convertToNul

由原來(lái)的 characterEncoding=utf8 調(diào)整為 characterEncoding=utf8mb4。

EmojiConverter

更友好的解決方式應(yīng)該將 Emoji 當(dāng)做字符串存儲(chǔ),然后在取出來(lái)的時(shí)候再轉(zhuǎn)成 Emoji,這樣可以兼容所有的數(shù)據(jù)庫(kù)版本。

我在 GitHub 上找到了這樣的一個(gè)庫(kù)——EmojiConverter,它可以很方便地將 Emoji 轉(zhuǎn)換為字符串的別名,同時(shí)也支持將這個(gè)別名轉(zhuǎn)換為 Emoji。

1)在 pom.xml 文件中加入 EmojiConverter

<dependency>
	<groupId>com.github.binarywang</groupId>
	<artifactId>JAVA-emoji-converter</artifactId>
	<version>0.1.1</version>
</dependency>

2)存儲(chǔ) Emoji 之前調(diào)用 tohtml() 方法轉(zhuǎn)換一下

EmojiConverter emojiConverter = EmojiConverter.getInstance();
String html = emojiConverter.toHtml(keywords.getContent().trim());
// JFinal 的保存方式
Record record = new Record().set("content", html)
Db.save("keywords", record);

比如說(shuō),要存儲(chǔ)的內(nèi)容當(dāng)中包含了一個(gè)點(diǎn)贊的 Emoji。

mysql庫(kù)不能修改為utf8mb4編碼,但又想存emoji表情怎么辦?

 

那么通過(guò) emojiConverter.toHtml() 轉(zhuǎn)了之后的內(nèi)容是什么樣子呢?是一個(gè)碼點(diǎn):,debug 的時(shí)候截圖如下所示。

mysql庫(kù)不能修改為utf8mb4編碼,但又想存emoji表情怎么辦?

 

這樣的話,MySql 保存的內(nèi)容就是一個(gè)普通的字符串了,編碼方式仍然可以是 utf8。

3)顯示 Emoji 的時(shí)候調(diào)用 toUnicode() 方法格式化一下

String unicode = emojiConverter.toUnicode(content);
outMsg.setContent(unicode);

原文:https://juejin.im/post/5db696b76fb9a0203b234c22?utm_source=gold_browser_extension

分享到:
標(biāo)簽:編碼 mysql
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定