微信emoji表情編碼的處理與儲存

小編第一次碰到這個問題是在做微信開發認證的時候,微信認證獲取用戶暱稱的時候,當獲取到帶emoji表情的時候,小編髮現後臺顯示的是亂碼或者是顯示爲NULL(前臺展示爲遊客)

既然碰到,解決了,就簡單給大家講一下吧。

首先是從 emoji表情 的編碼說起

無論是字符或者圖片以及其他什麼東東,都是以二進制比特流的存進計算機,那麼如何這些二進制比特流以圖片或者視頻或者文字的形式展現給計算機使用者。記得黑客帝國裏一個場景:當別人問爲什麼要看電腦監控的時候全部都是二進制時候,那逗比說:”電腦解碼速度太慢,只能看二進制碼流,不過,在我眼裏,這些跟視頻沒什麼兩樣“。一直覺得這貨很屌炸天嘛。裝X有格調。哈哈哈。不扯淡。進入正題

當二進制轉換成用戶所熟悉的圖片,文字形式的時候,例如文字,需要的是一個編碼標準,所以各種各樣的字符集標準應孕而生,字符集規定了二進制和文字的轉換關係。 說了那麼多我們來看一個實際例子,下面就是屌這個字在各種編碼下的十六進制和二進制編碼結果,怎麼樣有沒有一種很屌的感覺?

字體編碼是有了,但是 隨着互聯網的發展,對同一字庫集的要求越來越迫切,Unicode標準也就自然而然的出現。它幾乎涵蓋了各個國家語言可能出現的符號和文字,並將爲他們編號。詳見:Unicode on Wikipedia。Unicode的編號從0000開始一直到10FFFF共分爲16個Plane,每個Plane中有65536個字符。而UTF-8則只實現了第一個Plane,可見UTF-8雖然是一個當今接受度最廣的字符集編碼,但是它並沒有涵蓋整個Unicode的字庫,這也造成了它在某些場景下對於特殊字符的處理困難。emoji表情就是之一。

emoji表情

emoji表情採用的是 Unicode編碼,Emoji就是一種在Unicode位於\u1F601-\u1F64F區段的字符。這個顯然超過了目前常用的UTF-8字符集的編碼範圍\u0000-\uFFFF。所以這也就導致了小編開頭出現的問題, 原因是什麼呢 :一般數據庫採用的數據庫編碼是utf-8。而且emoji支持的編碼 utf8m4  mysql5.5 之後才支持,emoji表情所在的編碼範圍。utf-8編碼根本不支持,所以也就導致了開頭的亂碼。

知道了原因,解決就相對比較簡單了,只要把數據庫的編碼更改就可以了,添加emoji表情的支持。更改編碼爲 utf8mb4

| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8mb4_general_ci         |
| collation_database       | utf8mb4_general_ci         |
| collation_server         | utf8mb4_general_ci         |

另外一種方法就是在微信認證的時候,把微信名稱中的emoji表情字符過濾掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章