微信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表情字符過濾掉。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com