絵文字は何文字? - 1 つの絵文字が 1 文字とは限らない理由

約 5 分で読めます

😀 は 1 文字? 👨‍👩‍👧‍👦 (家族の絵文字) は? 実は、見た目は 1 つの絵文字でも、内部的には複数の文字が結合してできているものがあります。X (旧 Twitter) で「あと 1 文字入るはずなのに入らない!」という経験、ありませんか?

絵文字の文字数カウント

絵文字見た目Unicode の文字数UTF-16 の長さUTF-8 のバイト数
😀1 つ1 文字24 バイト
👍1 つ1 文字24 バイト
👍🏽1 つ2 文字48 バイト
👨‍👩‍👧‍👦1 つ7 文字1125 バイト
🏳️‍🌈1 つ4 文字614 バイト
🇯🇵1 つ2 文字48 バイト

👨‍👩‍👧‍👦 (家族) は、見た目は 1 つの絵文字ですが、内部的には「男性 + 結合文字 + 女性 + 結合文字 + 女の子 + 結合文字 + 男の子」の 7 文字で構成されています。

なぜ絵文字の文字数がバラバラなの?

仕組み説明
基本絵文字1 つのコードポイント = 1 文字😀 (U+1F600)
肌の色基本絵文字 + 肌色修飾子 = 2 文字👍🏽 = 👍 + 🏽
ZWJ 結合複数の絵文字を見えない文字でつなぐ👨‍👩‍👧‍👦 = 👨 + ZWJ + 👩 + ZWJ + 👧 + ZWJ + 👦
国旗2 つの地域指示記号の組み合わせ🇯🇵 = 🇯 + 🇵

ZWJ は「Zero Width Joiner」(幅ゼロの結合子) の略で、画面には表示されないけれど文字数としてはカウントされる特殊な文字です。

SNS での絵文字の文字数カウント

サービス😀 のカウント👨‍👩‍👧‍👦 のカウントカウント方式
X (旧 Twitter)2 文字分7〜11 文字分独自の重み付け
Instagram1 文字1 文字見た目の絵文字数
LINE1 文字1 文字見た目の絵文字数
SMS絵文字 1 つで 70 文字制限に同左エンコーディング切替

X では絵文字 1 つが 2 文字分としてカウントされます。140 文字の制限で絵文字を多用すると、テキストに使える文字数がどんどん減ります。X の文字数制限の歴史で触れたように、絵文字の扱いは文字数カウントの複雑さを象徴しています。

SMS と絵文字の意外な関係

SMS (ショートメッセージ) は、絵文字を 1 つ入れるだけで文字数制限が大きく変わります。

条件1 通あたりの文字数エンコーディング
英数字のみ160 文字GSM-7 (7 ビット)
日本語のみ70 文字UCS-2 (16 ビット)
絵文字を含む70 文字UCS-2 に切り替わる

英語の SMS は 1 通 160 文字ですが、絵文字を 1 つ入れるだけで UCS-2 エンコーディングに切り替わり、70 文字に減ります。絵文字 1 つのために 90 文字分の容量を失うのです。

絵文字の数は増え続けている

Unicode バージョン絵文字の総数追加された主な絵文字
20106.0約 720基本的な顔、動物、食べ物
20158.0約 1,620肌の色のバリエーション
202013.0約 3,300忍者、タピオカ、ビーバー
202416.0約 3,790木の実、指紋、スプラッター

絵文字は毎年増え続けていて、2024 年時点で約 3,790 種類。最初の携帯電話の絵文字 (1999 年、NTT ドコモ) は 176 種類でした。25 年で 20 倍以上に増えたことになります。

プログラミングと絵文字の文字数

プログラミングで絵文字の文字数を正しく数えるのは、実はとても難しい問題です。

言語"👨‍👩‍👧‍👦".length の結果理由
JavaScript11UTF-16 のコードユニット数
Python7Unicode コードポイント数
Swift1書記素クラスタ数 (見た目の文字数)

同じ絵文字なのに、プログラミング言語によって「長さ」が 1、7、11 と全く違う結果になります。文字数とバイト数の違いの応用問題として、絵文字は最も複雑なケースの 1 つです。

絵文字や Unicode に関する書籍は Amazon でも探せます

この記事を共有