1997年,日本人發明,定義在unicode的私有區域。
此時兩個位元組可以表示emoji。
IOS 4在日本支援emoji,使用的是這種私有編碼。
2010年,unicode 6.0正式支援emoji,所有emoji重新編碼。
此時的emoji所在的編碼範圍超出了2個位元組。
IOS 5開始,支援unicode的emoji,放棄對日本人的私有emoji支援。
是以,同一個emoji,尤其是老的那些emoji,有兩個編碼。
不同系統的支援情況,不一樣。
emoji的編碼雖然相同,但是樣子都是有專利的,是以各個系統,展示起來可能各不相同。
因為unicode的emoji超出了2個位元組的表示範圍,很多系統需要字元編碼才能支援emoji。比如mysql,在更新了utf8mb4之後才支援。
日本人的編碼,其實也不止一種,如果想要你的emoji在所有系統都能展示,需要你在展示的時候做轉換。
emoji的發展曆程、unicode編碼演化、以及各種系統對字元串編碼格式支援的變遷,三者互動在一起,引發各種有趣的問題。幾乎每一次emoji不能展示,背後都與這三者相關。
因為涉及到系統底層的編碼支援,很多時候問題不好解決。
本來想細細地寫一篇文章,最近身體不适,精力不允許了。感興趣的閱讀下我列出的參考資料,很有意思。
Reference
https://gist.github.com/mranney/1707371#file-emoji_sad-txt
https://en.wikipedia.org/wiki/Emoji
http://doc.cat-v.org/bell_labs/utf-8_history
https://emojipedia.org/unicode-6.0/
https://stackoverflow.com/questions/7856775/how-to-convert-the-old-emoji-encoding-to-the-latest-encoding-in-ios5
https://en.wikipedia.org/wiki/Private_Use_Areas
https://www.iamcal.com/emoji-in-web-apps/