mysql unicode转汉字_如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他
01、前言
Emoji 在我們生活中真的是越來越常見了,幾乎每次發(fā)消息的時候不帶個 Emoji,總覺得少了點什么,似乎干巴巴的文字已經(jīng)無法承載我們豐富的感情了。對于我們開發(fā)者來說,如何將 Emoji 存入 MySql 數(shù)據(jù)庫或者取出來,就變成了一種必須掌握的技能了。
Emoji 是一種圖形符號,能夠很直觀地反應(yīng)出某種文字含義。它讓我想起遠(yuǎn)古時代的象形文字。
Emoji 其實是一個日語詞(えもじ),E 表示"絵",moji 表示"文字";連在一起就是"絵文字",可以更形象化地表情達意。
02、糟糕
如果我們直接將 Emoji 表情存入數(shù)據(jù)庫的話,通常會出現(xiàn)下面這個錯誤。
因為數(shù)據(jù)庫的字符編碼一般是 utf8(支持的編碼范圍為 u0000-uFFFF),而 Emoji 所在的編碼范圍是 u1F601-u1F64F,超出 MySql 的邊界了。
怎么解決這個問題呢?
03、utf8mb4
可以將 MySql 的字符集由 utf8 調(diào)整為 utf8mb4。utf8mb4 是 MySql 在 5.5.3 版本之后增加的一個編碼方式,用來兼容四字節(jié)的 Unicode(包括 Emoji)。
理論上,utf8mb4 是 utf8 的超集,其中 mb4 是 most bytes 4 的意思,將字符集修改為“utf8mb4”,并不會對已有的 utf8 編碼讀取產(chǎn)生任何問題。
但通常這種方式并不是最優(yōu)解,因為應(yīng)用層還需要將 MySql 的連接方式作出以下調(diào)整:
jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8mb4&useSSL=false&zeroDateTimeBehavior=convertToNull由原來的 characterEncoding=utf8 調(diào)整為 characterEncoding=utf8mb4。
04、EmojiConverter
更友好的解決方式應(yīng)該將 Emoji 當(dāng)做字符串存儲,然后在取出來的時候再轉(zhuǎn)成 Emoji,這樣可以兼容所有的數(shù)據(jù)庫版本。
我在 GitHub 上找到了這樣的一個庫——EmojiConverter,它可以很方便地將 Emoji 轉(zhuǎn)換為字符串的別名,同時也支持將這個別名轉(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)存儲 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);比如說,要存儲的內(nèi)容當(dāng)中包含了一個點贊的 Emoji。
那么通過 emojiConverter.toHtml() 轉(zhuǎn)了之后的內(nèi)容是什么樣子呢?是一個碼點:👍,debug 的時候截圖如下所示。
這樣的話,MySql 保存的內(nèi)容就是一個普通的字符串了,編碼方式仍然可以是 utf8。
3)顯示 Emoji 的時候調(diào)用 toUnicode() 方法格式化一下
String unicode = emojiConverter.toUnicode(content); outMsg.setContent(unicode);格式化后的內(nèi)容可以正常顯示在微信公眾號回復(fù)的文本消息中,截圖如下所示。
05、最后
謝謝大家的閱讀,原創(chuàng)不易,喜歡就點個贊,這將是我最強的寫作動力。如果你覺得文章對你有所幫助,也蠻有趣的,就關(guān)注一下我的公眾號,謝謝。
總結(jié)
以上是生活随笔為你收集整理的mysql unicode转汉字_如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ansys fluent udf man
- 下一篇: python web开发环境_Flask