下記の文字列の長さを表示する JavaScriptのプログラム、結果はどうなるでしょう?
console.log("👨👨👧👦👩👩👧👦👨👨👧👦".length)
実は、結果は33!肌の色の違いと家族構成などの組み合わせで1文字の絵文字を合成する、結合文字の一種です。 日本語の濁音や半濁音のように、言語別ルールで1文字が決まっています。 全ルールが Unicode から公開され、それを元に C# で書かれた文字分割プログラム「GraphemeSplitter by @ufcpp」を発見、JavaScriptで移植し追加しました。(src on GitHub)
Grapheme(グラフィーム、書記素)とは、意味で区別する最小の図形のこと。たぶん、人にとっての1文字を表します。下記のように、使い方はとってもシンプル!(sample)
import gsplit from 'https://taisukef.github.io/GraphemeSplitter/GraphemeSplitterJS/StringSplitter.Grapheme.mjs' console.log(gsplit.split("👨👨👧👦👩👩👧👦👨👨👧👦")) // 👨👨👧👦, 👩👩👧👦, 👨👨👧👦
結合絵文字を含めると、もっとぴったりくる絵文字があるかもしれませんが、ひとまず1つのUnicodeの文字コード(コードポイントと呼ぶ)で扱えるもので構成しておこうと思います。 こちら、ソフトキーボードの「ALT」を押すことで、IchigoJam絵文字の入力にも対応した「IchigoJam web」です。
「IchigoJam web」ブラウザ、スマホ、タブレットでIchigoJam体験!
小さなこどもでも安心、複雑なセットアップやネットワークが不要で、思う存分プログラミングを楽しめる IchigoDyhook も再入荷!
(持ち運びできるプログラミング専用PC「IchigoDyhook」ついに入荷!)
絵文字を探す際に作った、ユニコード一覧表示アプリ「unicode」で、約111万のコードポイントを巡ってみましょう。
8bitに収まる、0〜255(0xff)には、おなじみASCIIコード。半角カタカナの姿はありません。
変わった文字がありますね!
JISで導入されたいろんな記号、罫線などや、Unicodeに絵文字が導入されるきっかけとなった、i-mode絵文字が登場!
点字も収録!
ひらがな発見!
漢字が続き・・・
何やらかわいい文字が!
アラビア文字でしょうか、結合文字の影響か、表示が崩れることがあります。16bitも終盤に、半角カタカナも発見。
しばらく何もない空間が続きます。古代文字など、増えるかもしれません。
とーとつに麻雀牌!チュンだけ絵文字になってしまっているのが残念。ドミノは使えそう。
絵文字ゾーンにきました!IchigoJam絵文字との対応もこの中からピックアップしています。
またしばらくまばらなゾーンになり、現在は、16進法で0x2f87fが最後の様子。収録余力はまだまだあります!
あるアプリや環境では見えても、他の環境では見えない問題、まだありそうなので、要調査!
「Windows 10にオリジナル絵文字「ニンジャキャット」が追加されることが明らかに - GIGAZINE」
結合絵文字の全組み合わせを調べてみるのもおもしろいかも。
links
- 絵文字の連結と、書記素クラスター判定 | ++C++; // 未確認飛行 C ブログ
- 書記素分割/Unicode カテゴリー判定 | ++C++; // 未確認飛行 C ブログ
- Unicodeとは? その歴史と進化、開発者向け基礎知識 - Build Insider
- taisukef/GraphemeSplitter: A C# and JavaScript implementation of the Unicode grapheme cluster breaking algorithm
- ufcpp/GraphemeSplitter: A C# implementation of the Unicode grapheme cluster breaking algorithm (fork元)
- ユニコード一覧表示アプリ