これは元々GitHubの絵文字出力確認用に作ったもので、main repoはGitHubにあります。
https://github.com/higuma/markdown-emoji-test/blob/main/README.ja.md
QiitaでもMarkdownでUnicode入力する事により絵文字表示が可能ですが、細かい動作は色々と異なります。そこで同じ絵文字データをQiita環境で処理した場合の表示確認用として一式アップします。
なおQiitaとGitHubではMarkdownも細かい点が異なります。GitHub用の記述はそのままとし、Qiita特有の変更点は打ち消し線を使って記述しています。
解説 → 単独絵文字
はじめに
Unicodeには様々な絵文字の記述方法がある。
- 基本(単独)絵文字
- 文字キー
- 国旗・地域旗
- 修飾子(肌の色)
- ゼロ幅接合子シーケンス
これらはUnicode技術標準#51で定義されているが、実際の表示環境では新しい仕様ほど未実装の場合が多い。また標準とデフォルト動作が異なったり、さらにはUnicode標準にない独自仕様を持つ環境も多い。
テストデータ
Unicodeではこのためのテストデータを用意しており、ターゲット環境上で表示させてUnicode仕様にどれだけ準拠しているか確認することができる。HTML版とテキスト版の2種類がある。
- HTML: https://www.unicode.org/emoji/charts/emoji-style.html
- テキスト: https://www.unicode.org/emoji/charts/emoji-style.txt
目的
Web用などの文書作成にはMarkdownが幅広く用いられるようになったが、Unicodeでは絵文字テストデータのMarkdown版は用意されていない。今回Markdown版を一式作成した。
単独絵文字
Unicodeの単一文字で絵文字を表現する場合には2種類ある。
- 絵文字専用コード(例: U+1F9F2 → 🧲)
- テキスト・絵文字共有コード(例: U+231A → ⌚︎, ⌚️)
同じ文字コードがテキスト・絵文字両方の表現を持つ場合、その選択にVS15(U+FE0E)またはVS16(U+FE0F)を用いる。これらは異体字セレクタ(Variation selectors)と呼ばれ、表現が複数ある文字に対して用いられる。
対象文字コードの後にVS15(テキスト指定)またはVS16(絵文字指定)を追加して表現を指定する。VS15/16は片方の表現しか持たない文字に対しては単に無視される。適用例は次の通り。U+0041はテキストのみ、U+1F9F2は絵文字のみ、またU+02139とU+231Aは両方が可能でVS15/16で表示を選択する。
文字 | デフォルト | VS15あり | VS16あり |
---|---|---|---|
U+0041 |
A A |
A︎ A︎ |
A️ A️ |
U+2139 |
ℹ ℹ |
ℹ︎ ℹ︎ |
ℹ️ ℹ️ |
U+231A |
⌚ ⌚ |
⌚︎ ⌚︎ |
⌚️ ⌚️ |
U+1F9F2 |
🧲 🧲 |
🧲︎ 🧲︎ |
🧲️ 🧲️ |
なおデフォルト(VS15/16なし)の場合にどちらが選択されるかは表示環境により一般に異なる。またサポート上の理由で一方しか表示できなかったり、あるいは未対応で表示できない場合もある。
公式仕様ではemoji-sequences.txtの
type_field
がBasic_Emoji
の場合が単独絵文字で、コード表示がFE0F
とのシーケンスの場合はテキスト、単独の場合は絵文字がデフォルト。ただし厳密なものではなく、上記の公式テストデータではVS15/16なしの場合は「環境依存」(may vary by platform)と表現している。
Markdownの表示テスト用一覧表は次の通り。
→ 単独絵文字
表には公式仕様で単独絵文字表現を持つ全文字コードがある(絵文字を持たないコード領域は除外)。セル内には文字コード表現が次の4行で入力されている。
- コーススパン内に文字入力
- デフォルト(VS15,16なし)
- テキスト指定(VS15付き)
- 絵文字指定(VS16付き)
各文字のコードスパン上にマウスカーソルを置くとポップアップで文字コードとUnicodeの文字名、採用時バージョンを表示する。2行目以降は実際の入力シーケンスを16進表現でポップアップする。
Qiita補足: ポップアップ機能はMarkdown文書中に
<span title="...">
を挿入して作成しているが、現在のQiitaのMarkdown環境では効き目がない。ただし修正しなくても害はなく、また将来のQiitaでは使えるようになる可能性もあるので文書データはそのままにしてある。
GitHub Markdownの仕様は全体的に絵文字優先でUnicodeとかなり異なる。例えばU+2194
↔
はUnicode標準ではテキストがデフォルトだが、GitHub Markdownは絵文字がデフォルト。またU+26BD⚽
は本来は両方の表現が可能だが、GitHub MarkdownではVS15が効かずコードスパンの場合だけテキスト表現になる。
Qiita補足: QiitaはGitHubとは逆にテキスト優先の仕様。例えばU+2600
☀
はGitHubでは絵文字がデフォルトだがQiitaには絵文字表現がない。星座記号(U+2648..U+2653)も同様に絵文字表現がない。
文字キー
UnicodeにはCOMBINING ENCLOSING KEYCAP(U+20E3 ⃣ )という結合文字があり、他の文字と組み合わせてキーボードなどボタン上に書かれた文字を表現するのに用いられる。この中で電話のダイヤルボタンに用いられるキー(#
,*
,0
..9
)にだけ絵文字表現が存在する。
→ 文字キー
Qiitaではこの方法に関しては絵文字は効かない。
国旗
Unicode絵文字では国旗はREGIONAL INDICATOR SYMBOL LETTER(U+1F1E6..U+1F1FF) 2文字の組み合わせで表現する。
→ 国旗
多くの表示環境では各国の国旗ではなく、小さめのアルファベット2文字をそのまま表示する。
タグ(地域旗)
国内地域を表す旗にはタグと呼ばれる専用文字によるシーケンスが用いられる。タグに関しては次の英語版Wikipediaが詳しい。
元々は言語の種類を表すために作られたものだが、現在は絵文字に転用されており、イギリス国内の地方の旗を表現する目的にのみ用いられている。
→ タグ(地域旗)
対応していない表示環境が多く、その場合は黒い旗が表示される。
修飾子(肌の色)
Unicode絵文字には修飾子(modifiers)と呼ばれる文字コードがあり、既存の絵文字とのシーケンスで表示効果を加える。現在は肌の色を表現する次の修飾子コードがある。
Code | Name |
---|---|
U+1F3FB | EMOJI MODIFIER FITZPATRICK TYPE-1-2 |
U+1F3FC | EMOJI MODIFIER FITZPATRICK TYPE-3 |
U+1F3FD | EMOJI MODIFIER FITZPATRICK TYPE-4 |
U+1F3FE | EMOJI MODIFIER FITZPATRICK TYPE-5 |
U+1F3FF | EMOJI MODIFIER FITZPATRICK TYPE-6 |
これらは人物や人体の部位を表す絵文字に対して作用する。例を示す。
修飾子 | U+1F44D 👍 |
U+1F9B6 🦶 |
U+1F9D1 🧑 |
---|---|---|---|
1-2 | 👍🏻 | 🦶🏻 | 🧑🏻 |
3 | 👍🏼 | 🦶🏼 | 🧑🏼 |
4 | 👍🏽 | 🦶🏽 | 🧑🏽 |
5 | 👍🏾 | 🦶🏾 | 🧑🏾 |
6 | 👍🏿 | 🦶🏿 | 🧑🏿 |
適用可能な全ての絵文字及びシーケンスは次の通り(人体に無関係な絵文字には効果がないため除外)。
→ 修飾子
発色の違いによる表示比較サンプルは次を参照。
→ 肌の色
ゼロ幅接合子シーケンス
ゼロ幅接合子(ZERO WIDTH JOINER U+200D)を用いて複数の絵文字コードを合成して表現する。Unicode絵文字で可能な組み合わせはemoji-zwj-sequences.txtに記述されている。全リストとその表示サンプルは次の通り。
リファレンス
Unicode® Emoji: https://unicode.org/emoji/techindex.html
Unicode® Technical Standard #51: https://unicode.org/reports/tr51/
解説 → 単独絵文字