Pythonでの絵文字表示とUnicodeについて

2020/02/14

Python 自然言語処理

t f B! P L
みなさん絵文字使ってますか?
最近、READMEで絵文字使いまくってるgitのレポジトリも増えてきました。
田舎者の私からみると大変オシャレに見えます。

Pythonで絵文字を使う

OSに絵文字フォントが入っていれば、通常の文字と同じようにprintできます。

print("🍭💡💦")

もうこれだけでおされです。

Unicode

Python3の文字列はデフォルトでUnicodeです。
Unicodeでは、文字をコードポイントという数字で表します。
ありがたいことに、数字・漢字・アルファベットだけでなく、絵文字や古代文字にまでコードポイントを割り当ててくれています。
これのおかげで我々は不自由なくいろいろな文字を使うことができます。
ありがたや。

では、実際にコードポイントを見てみましょう。

print(ord("💡")) # 128161
print(hex(ord("💡"))) # 0x1f4a1

Pythonでは、ord関数でその文字のコードポイント(10進数)を取得できます。
ちなみに、Unicodeは16進数表記がメジャーなので、hex関数で16進数にすることもあります。
さらにちなみにchr関数でその逆ができます。引数は10進数のコードポイントです。

print(chr(128161)) # 💡

Unicode表を見てみる

疑ってるわけではないですが、豆電球の絵文字のコードポイントは本当に0x1f4a1なのでしょうか。
WikipediaのUnicode一覧で確認してみましょう。

豆電球は上2桁が1Fなので、1F番台から探します。

この表から、(1F4A行目, 1列目)のセルを見ると、確かに💡がいます。
周りのフォントも眺めてみると楽しいです。

最後に、適当に選んだ16進数のコードポイントから絵文字に変換できるか試してみます。

1F370のショートケーキ🍰の絵文字で試してみましょう。

Pythonでは、先頭に0xをつけると16進数と見なしてくれます。
したがって、ショートケーキは0x1F370になります。

16進数→10進数の変換は、おなじみのint関数で可能です。
これと先ほどのchr関数を組み合わせれば良さそうです。

print(chr(int(0x1f370))) # 🍰

ショートケーキが出てきたでしょうか?

当ブログでも今度は絵文字を取り入れオサレ感を出していきたいと思います。

QooQ