文字数の数え方:全角・半角・絵文字・バイト数の違い
「見た目は1文字なのに、カウンターでは2文字以上になる」ことがあります。文字数、Unicodeのコードポイント、UTF-8バイト数は別の尺度です。上限を確認するときは、何を数えているかを先に確かめましょう。
更新日:2026年10月11日
先に結論:用途で見る数字を選ぶ
- 文章の見た目に近い数を知りたい:対応ブラウザの「見た目の文字数」
- JavaScriptで扱うUnicodeの符号位置を数えたい:「コードポイント数」
- 保存・通信データ量を確認したい:「UTF-8バイト数」
- 入力欄の上限に合わせたい:利用するサービスやアプリの公式カウンター・仕様
アプリによって「文字数」の定義が異なるため、投稿やフォームの上限が厳密な場合は、送信先の表示を最終基準にしてください。
同じ文字列でも数値が違う例
| 例 | コードポイント数 | 見た目の文字数 | UTF-8バイト数 | 違いの理由 |
|---|---|---|---|---|
A | 1 | 1 | 1 | ASCIIの英字 |
あ | 1 | 1 | 3 | 日本語1文字をUTF-8で表現 |
😀 | 1 | 1 | 4 | 補助平面の符号位置 |
| 家族の絵文字 | 7 | 1 | 25 | 人物4つと結合用の不可視文字で構成 |
U+304C(が) | 1 | 1 | 3 | 合成済みの文字 |
| 2 | 1 | 6 | 見た目が同じでも2つの符号位置 |
家族の絵文字は、一般的な「👨👩👧👦」の並びを例にしています。表示環境や文字列の組み立て方によって数え方が変わることがあります。
3つの数え方
1. コードポイント数
Unicodeが文字に割り当てた符号位置の数です。このサイトの文字数カウンターでは、JavaScriptのコードポイント単位で表示します。多くの日本語・英数字は1つですが、結合文字や複合絵文字では、見た目のまとまりより大きな値になることがあります。
2. 見た目の文字数(書記素クラスタ)
利用者が1文字と感じるまとまりに近い数です。アクセント記号を別の符号位置で表す文字や、複数の絵文字をつないだ表示も、ひとまとまりとして数える場合があります。Unicode標準はこうしたテキストの区切りを「書記素クラスタ」として定義しています。
3. UTF-8バイト数
文字列をUTF-8で符号化したときのデータ量です。英数字は多くの場合1バイト、日本語の多くは3バイト、絵文字の多くは4バイト以上を使います。データベースやAPIのサイズ制限を見るときは、文字数ではなくバイト数が条件になっていないか確認します。
入力上限を超えないための確認手順
- 上限の対象が、文字・コードポイント・バイトのどれかを仕様で確認する。
- 空白、改行、URL、絵文字がカウントに含まれるか確認する。
- このカウンターでコードポイント数と見た目の文字数を比べる。
- 送信先の入力欄にも貼り付け、送信先自身のカウント表示で最終確認する。
- 上限ぎりぎりではなく、少し余裕を残して調整する。
改行コードや、フォーム側で自動付加される署名・URLなどによって、送信後の長さが変わることもあります。
よくある質問
全角文字は半角文字の2倍で数えますか?
文字数では通常どちらも1文字です。UTF-8バイト数では、文字の種類によって使うバイト数が変わります。
見た目が同じ「が」なのにバイト数が違うのはなぜ?
合成済みの1つの符号位置で表す方法と、「か」と結合濁点を別々の符号位置で並べる方法があるためです。
絵文字を含む文章の上限は何を見ればよいですか?
サービスごとに数え方が異なります。投稿先や入力先の公式案内と、入力欄に表示されるカウンターを優先してください。
入力した文章は外部に送信されますか?
このサイトの文字数カウンターはブラウザ内で計算します。計測のために入力内容を当サイトのサーバーや外部AIへ送信しません。
参照した仕様
- Unicode Standard Annex #29: Unicode Text Segmentation — 書記素クラスタなどのテキスト区切り。
- WHATWG Encoding Standard: TextEncoder — ブラウザの文字列エンコードAPI。
サービスごとの文字数上限は個別に変わるため、このガイドでは特定サービスの上限値を固定していません。