世界が一つのネットワークでつながる現代社会、文字の問題は文字コードを16bitを超えて拡張するサロゲートペアだけでは解決しなかったようです。 例えば日本語のひらがな「ぱ」という文字、「は」と「゜」が結合した1文字です。ビルマ文字など、世界には結合して1文字となるいろんな言語があります。 Unicode(ユニコード)はこの「結合文字」に対応しています。

下記の文字列の長さを表示する JavaScriptのプログラム、結果はどうなるでしょう?

console.log("👨‍👨‍👧‍👦👩‍👩‍👧‍👦👨‍👨‍👧‍👦".length)

実は、結果は33!肌の色の違いと家族構成などの組み合わせで1文字の絵文字を合成する、結合文字の一種です。 日本語の濁音や半濁音のように、言語別ルールで1文字が決まっています。 全ルールが Unicode から公開され、それを元に C# で書かれた文字分割プログラム「GraphemeSplitter by @ufcpp」を発見、JavaScriptで移植し追加しました。(src on GitHub)

Grapheme(グラフィーム、書記素)とは、意味で区別する最小の図形のこと。たぶん、人にとっての1文字を表します。下記のように、使い方はとってもシンプル!(sample)

import gsplit from './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元)
- ユニコード一覧表示アプリ

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS