最終更新:
絵文字は何文字? - 1 つの絵文字が 1 文字とは限らない理由
😀 は 1 文字? 👨👩👧👦 (家族の絵文字) は? 実は、見た目は 1 つの絵文字でも、内部的には複数の文字が結合してできているものがあります。X (旧 Twitter) で「あと 1 文字入るはずなのに入らない!」という経験、ありませんか?
絵文字の文字数カウント
| 絵文字 | 見た目 | Unicode の文字数 | UTF-16 の長さ | UTF-8 のバイト数 |
|---|---|---|---|---|
| 😀 | 1 つ | 1 文字 | 2 | 4 バイト |
| 👍 | 1 つ | 1 文字 | 2 | 4 バイト |
| 👍🏽 | 1 つ | 2 文字 | 4 | 8 バイト |
| 👨👩👧👦 | 1 つ | 7 文字 | 11 | 25 バイト |
| 🏳️🌈 | 1 つ | 4 文字 | 6 | 14 バイト |
| 🇯🇵 | 1 つ | 2 文字 | 4 | 8 バイト |
👨👩👧👦 (家族) は、見た目は 1 つの絵文字ですが、内部的には「男性 + 結合文字 + 女性 + 結合文字 + 女の子 + 結合文字 + 男の子」の 7 文字で構成されています。
なぜ絵文字の文字数がバラバラなの?
| 仕組み | 説明 | 例 |
|---|---|---|
| 基本絵文字 | 1 つのコードポイント = 1 文字 | 😀 (U+1F600) |
| 肌の色 | 基本絵文字 + 肌色修飾子 = 2 文字 | 👍🏽 = 👍 + 🏽 |
| ZWJ 結合 | 複数の絵文字を見えない文字でつなぐ | 👨👩👧👦 = 👨 + ZWJ + 👩 + ZWJ + 👧 + ZWJ + 👦 |
| 国旗 | 2 つの地域指示記号の組み合わせ | 🇯🇵 = 🇯 + 🇵 |
ZWJ は「Zero Width Joiner」(幅ゼロの結合子) の略で、画面には表示されないけれど文字数としてはカウントされる特殊な文字です。
SNS での絵文字の文字数カウント
| サービス | 😀 のカウント | 👨👩👧👦 のカウント | カウント方式 |
|---|---|---|---|
| X (旧 Twitter) | 2 文字分 | 2 文字分 | 絵文字は一律重み 2 |
| SMS | 絵文字 1 つで 70 文字制限に | 同左 | エンコーディング切替 |
X の投稿上限は 280 の重み単位で、絵文字は 1 つあたり重み 2 を消費します。半角英数字は 1 文字が重み 1 なので、絵文字 1 つで英数字 2 文字分の枠を使うことになります。日本語や中国語のように 1 文字が重み 2 と定められた文字種では、絵文字 1 つは日本語 1 文字と同じ枠です (日本語だけで書けば実質 140 文字が上限)。この重み方式は内部のコードポイント数を見ないため、👨👩👧👦 のような結合絵文字でも消費は 2 のままです。X の文字数制限の歴史で触れたように、絵文字の扱いは文字数カウントの複雑さを象徴しています。
Instagram や LINE のように数え方を公表していないサービスもあります。公式の記載がない場合は、入力欄の残り文字数表示に絵文字を 1 つ足して減り方を見るのが確実です。見た目が 1 つでも内部が複数文字の絵文字では、予想より多く減ることがあります。
SMS と絵文字の意外な関係
SMS (ショートメッセージ) は、絵文字を 1 つ入れるだけで文字数制限が大きく変わります。
| 条件 | 1 通あたりの文字数 | エンコーディング |
|---|---|---|
| 英数字のみ | 160 文字 | GSM-7 (7 ビット) |
| 日本語のみ | 70 文字 | UCS-2 (16 ビット) |
| 絵文字を含む | 70 文字 | UCS-2 に切り替わる |
英語の SMS は 1 通 160 文字ですが、絵文字を 1 つ入れるだけで UCS-2 エンコーディングに切り替わり、70 文字に減ります。絵文字 1 つのために 90 文字分の容量を失うのです。
この 70 という数は、1 通で送れる 16 ビット単位の個数です。絵文字の多くは 16 ビットに収まらず 1 つで 2 単位を使うため、絵文字だけを並べると 1 通に入るのは 35 個ほどになります。肌の色や ZWJ で結合した絵文字はさらに単位を消費するので、👨👩👧👦 なら 11 単位、1 つで日本語 11 文字分の枠を占めます。
絵文字の数は増え続けている
| 年 | Unicode バージョン | 絵文字の総数 | 追加された主な絵文字 |
|---|---|---|---|
| 2010 | 6.0 | 約 720 | 基本的な顔、動物、食べ物 |
| 2015 | 8.0 | 約 1,630 | 肌の色のバリエーション |
| 2020 | 13.0 | 約 3,300 | 忍者、タピオカ、ビーバー |
| 2024 | 16.0 | 3,790 | 指紋、ハープ、飛び散り |
| 2025 | 17.0 | 3,953 | シャチ、トロンボーン、宝箱 |
この件数は、Unicode が配布する絵文字データファイルの集計にそろえたものです。表示に必要な指定をすべて含む形 (完全修飾) のシーケンスに、肌の色 5 種と髪型 4 種の構成要素を加えて数えます。数え方が違えば総数も変わるため、他の資料と桁が合わないときはまず基準を確かめてください。
2026 年 8 月時点の最新版は 17.0 で 3,953 件、直前の 16.0 からは 163 件の増加です。携帯電話向けとして広く知られる 1999 年の NTT ドコモ (i-mode) の絵文字は 176 種類で、それ以前にも 1997 年の J-Phone による 90 種類ほどの実装がありました。i-mode の 176 種類を起点にすると、26 年で 20 倍以上に増えたことになります。
プログラミングと絵文字の文字数
プログラミングで絵文字の文字数を正しく数えるのは、実はとても難しい問題です。
| 言語 | "👨👩👧👦".length の結果 | 理由 |
|---|---|---|
| JavaScript | 11 | UTF-16 のコードユニット数 |
| Python | 7 | Unicode コードポイント数 |
| Swift | 1 | 書記素クラスタ数 (見た目の文字数) |
同じ絵文字なのに、プログラミング言語によって「長さ」が 1、7、11 と全く違う結果になります。文字数とバイト数の違いの応用問題として、絵文字は最も複雑なケースの 1 つです。