日本の携帯電話から普及した『絵文字』は英語でも「Emoji」と呼ばれており世界中で使われています。それは文字コードの国際規格であるUnicodeに絵文字が登録されことがきっかけでした。現在、世界中の端末で絵文字が利用できます。今回はなでしこのプログラムで絵文字の一覧表を表示してみましょう。

  • 絵文字の一覧表を作るプログラムを実行したところ

    絵文字の一覧表を作るプログラムを実行したところ

UnicodeとEmojiについて

Unicodeとは文字コードの国際的な標準規格です。世界中のさまざまな言語の文字を収録し、通し番号を割り当てるととで、一つのコード体系のもとで使用できるようにしたものです。Unicodeの規格は非営利団体のユニコードコンソーシアムによって制定されています。

そして、日本の携帯電話で使われていた絵文字が、Googleなどの働きかけにより2010年のUnicode 6.0に採用されました。それ以降、メッセンジャーアプリやSNSなどを通して世界中で積極的に利用されるようになりました。このように絵文字が規格化されたことで、OSや機器を超えて同じように文字が表示できるようになりました。

なお、Unicodeには毎年のように新しい文字が登録されており、去年(2020年)3月にはUnicodeのバージョン13がリリースされました。毎年のように新バージョンがリリースされていますが、今年はコロナウィルスのせいでUnicode14のリリースが遅れています。(参照記事)

なお、Unicode13で追加された絵文字にはニンジャやタキシードを着た人、ネコやマンモス、シロクマなどがあります。こちらのUnicodeのサイトを見るとどんな絵文字が追加されたのか確認できます。

  • Unicode13で追加された絵文字

    Unicode13で追加された絵文字

絵文字のコードは何番?

今回はなでしこで絵文字の一覧表を作成するプログラムで作ってみましょう。どんな絵文字が利用できるのか、また、Unicode13の絵文字が自分のブラウザで表示できるのか確認もできるでしょう。

その際、覚えておきたいのは、画面に表示されている文字の一つ一つに番号が割り振られているということです。その番号を出力することで文字が表示されます。絵文字も同じで、一つ一つの絵文字に異なる文字コードが割り振られています。

例えば、世界で最も使われている絵文字は『😂』と『❤️』ですが、それぞれ、『😂』には0x1F602、『❤️』には0x2764が割り振られています。ちなみに、番号の先頭にある0xは16進数を表しており、0x1F602を10進数に直すと128514となります。コンピューターの世界ではよく16進数が使われており、文字コードも16進数を使って表します。

なでしこで文字コードを調べたい場合

なでしこを使えば、任意の絵文字の文字コードも簡単に調べることができます。以下のプログラムを簡易エディタに入力して実行してみましょう。

文字=『😂』
番号=HEX(ASC(文字))
「0x{番号}」を表示。

プログラムを入力して、[実行]ボタンを押すと、変数「文字」に指定した絵文字のコードを表示します。

  • 絵文字😂のコード番号を調べるプログラムを実行したところ

    絵文字😂のコード番号を調べるプログラムを実行したところ

特定の文字の文字コードを調べる関数が「ASC(文字)」です。そして数値を16進数の文字列に変換するのが「HEX(数値)」です。逆にコード番号から文字に変換する関数が「CHR(番号)」です。これらの関数を組み合わせることで、文字コードの一覧表を作成できるでしょう。

文字コードの一覧表を作ろう

なお、どんな絵文字が定義されているのか一覧表がUnicodeのサイトに確認できます。こちらのテキストファイルには絵文字の意味が英語で記述されています。

これに基づいて表を出力するプログラムを作ってみましょう。以下のプログラムをなでしこの簡易エディタに書き込んで実行してみましょう。

# 絵文字一覧を表示 --- (*1)
絵文字領域=[
  ["時計など", 0x2310, 0x231F],
  ["操作ボタンなど", 0x23e0, 0x23FF],
  ["天気トランプなど", 0x2600, 0x26FF],
  ["装飾記号", 0x2700, 0x27BF],
  ["顔文字", 0x1F600, 0x1F64F],
  ["その他の記号", 0x2600, 0x26FF],
  ["その他の記号と絵文字", 0x1F300, 0x1F5FF],
  ["記号と絵文字補助", 0x1F900, 0x1F9FF],
  ["記号と絵文字拡張A", 0x1FA70, 0x1FAFF],
  ["交通と地図の記号", 0x1F680, 0x1F6FF]
]
結果=『』
# 繰り返し絵文字領域を表示する --- (*2)
絵文字領域を反復
  結果=結果&「<h3>{対象[0]}</h3><table>」
  結果=結果&「<tr><th>-</th>」
  16回、結果=結果&「<th>{HEX(回数-1)}</th>」
  結果=結果&「</tr>」。
  Cを対象[1]から対象[2]まで繰り返す
      もし(C%16=0)ならば
          結果=結果&「<tr><th>0x{HEX(C)}</th>」。
     ここまで。
      結果=結果&「<td>{CHR(C)}</td>」# --- (*3)
      もし(C%16=15)ならば、結果=結果&「<tr>」。
  ここまで。
  もし(C%16≠15)ならば、結果=結果&「<tr>」。
  結果=結果&「</table>{改行}」
ここまで。
DOM親要素に結果をHTML設定。# --- (*4)

プログラムを実行すると、以下のように表示されます。筆者の環境では、Unicode13で追加されたニンジャやタキシードを着た人、マンモスなどが正しく表示されました。

  • 文字コードの一覧表を出力したところ

    文字コードの一覧表を出力したところ

プログラムを確認してみましょう。(*1)では絵文字が定義されている領域を配列で指定しています。ここでは[領域の名前, 先頭番号, 末尾番号]の順番で記述しています。

それで(*2)では(*1)で定義した配列を利用して表を作成します。『反復』文を利用して繰り返し絵文字領域を表として出力します。(*3)の部分で実際に絵文字を追記します。『CHR(番号)』関数を利用して文字コードを文字に変換して文字列に追記します。なお、HTMLのtable要素を動的に作成します。それから、最後の(*4)の部分でHTMLを書き込むことで表をブラウザ内に出力します。

まとめ

以上、今回は絵文字の一覧表を作成するプログラムを紹介しました。Unicodeや絵文字についても理解を深めることができました。ちなみに、このような一覧表を手作業で作ろうと思ったら大変なことです。プログラムを使えば、30行ほどのプログラムで、膨大な個数の絵文字も、綺麗に表にして出力できます。これからもプログラムで仕事をどんどん自動化していきましょう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。