Emoji 簡介

阮一峰發表於2017-04-13

一、含義

Emoji 是可以插入文字的圖形符號。

它是一個日語詞,e表示"絵",moji表示"文字"。連在一起,就是"絵文字"。

Emoji 在上個世紀90年代,由日本電信商引入服務,最早用於在短訊息之中插入表情。2007年,蘋果公司的 iPhone 支援了 Emoji,導致它在全世界範圍的流行。

二、Unicode 標準化

早期的 Emoji 是將一些特定的符號組合替換成圖片,比如將:)替換成?。這種方法很難標準化,能夠表達的範圍也有限。

2010年,Unicode 開始為 Emoji 分配碼點。也就是說,現在的 Emoji 符號就是一個文字,它會被渲染為圖形。

由於越來越受歡迎,Emoji 的國際標準在 2015 年出臺,目前已經是 5.0 版了。

  • Emoji 1.0:2015年8月
  • Emoji 2.0:2015年11月
  • Emoji 3.0:2016年6月
  • Emoji 4.0:2016年11月
  • Emoji 5.0 (beta):2017年3月

截止2017年4月,列入 Unicode 的 Emoji 共有2389個

三、渲染實現

Unicode 只是規定了 Emoji 的碼點和含義,並沒有規定它的樣式。舉例來說,碼點U+1F600表示一張微笑的臉,但是這張臉長什麼樣,則由各個系統自己實現。

因此,當我們輸入這個 Emoji 的時候,並不能保證所有使用者看到的都是同一張臉。如果使用者的系統沒有實現這個 Emoji 符號,使用者就會看到一個沒有內容的方框,因為系統無法渲染這個碼點。

目前,蘋果系統安卓系統TwitterGithubFacebook 都有自己的 Emoji 實現。

四、使用方式

Emoji 雖然是文字,但是無法書寫,必須使用其他方法插入文件。

(1)最簡單的方法當然是複製/貼上,你可以到 getEmoji.com 選中一個 Emoji 貼在自己的文件即可。

(2)另一種方法是通過碼點輸入 Emoji。以 HTML 網頁為例,將碼點U+1F600寫成 HTML 實體的形式😀(十進位制)或😀(十六進位制),就可以插入網頁。碼點到這個頁面查詢。

(3)JavaScript 輸入 Emoji,可以使用 node-emoji 這個庫。



var emoji = require('node-emoji');

// 返回 coffee 的 Emoji
emoji.get('coffee'); 

// 返回文字標籤對應的 Emoji
// https://www.webpagefx.com/tools/emoji-cheat-sheet/
emoji.get(':fast_forward:');

// 將文字替換成 Emoji
emoji.emojify('I :heart: :coffee:!');

// 隨機返回一個 Emoji 
emoji.random();

// 查詢 Emoji
// 返回結果是一個陣列 
emoji.search('cof');

(4)還可以通過 CSS 插入 Emoji。


<link href="https://afeld.github.io/emoji-css/emoji.css" rel="stylesheet">
<i class="em em-baby"></i>

五、Emoji 組合

Unicode 除了使用單個碼點表示 Emoji,還允許多個碼點組合表示一個 Emoji。

其中的一種方式是"零寬度連線符"(ZERO WIDTH JOINER,縮寫 ZWJ)U+200D。舉例來說,下面是三個 Emoji 的碼點。

  • U+1F468:男人
  • U+1F469:女人
  • U+1F467:女孩

上面三個碼點使用U+200D連線起來,U+1F468 U+200D U+1F469 U+200D U+1F467,就會顯示為一個 Emoji ?‍?‍?,表示他們組成的家庭。如果使用者的系統不支援這種方法,就還是顯示為三個獨立的 Emoji ???。

六、趣聞

根據 emojitracker 的調查,全世界最流行的 emoji,第一名是笑出眼淚 ?,第二名是紅心❤️。

日曆的 Emoji ?(U+1F4C5) 在蘋果系統之中,一律是7月17日。這是蘋果公司釋出 iCal 的日子。有人戲稱這個日子是"世界 Emoji 日"。

七、參考連結

(完)