文字数の「数え方」は一つではない — ツールで結果が違う理由
同じ文章を数えたのに、ツールによって文字数が違う——結論から言うと、どれか一つだけが常に正しいのではなく、「1文字」の定義が複数あり、用途によって選ぶものです。3つの数え方の違いを実例で確かめ、用途別の選び方をまとめます。
なぜツールによって文字数が違うのか
まず一般的な仕組みから説明します。コンピュータにとっての「1文字」には、主に3つの数え方があります。
- 見た目の1文字(書記素クラスタ。以下、書記素): 人が「1文字」と感じるまとまりを、Unicode の規則で近似した単位です(UAX #29: Unicode Text Segmentation)。
- コードポイント: Unicode が文字や記号に割り当てた番号の個数です。見た目が1文字でも、複数のコードポイントで構成されることがあります。
- UTF-16コード単位: JavaScript の文字列の
.length(例:text.length)で得られる数です。一部の漢字や絵文字は、1コードポイントでも2単位になります。
普通の日本語の文章では3つはほぼ一致します。ズレるのは、絵文字・記号・一部の漢字などです。ツールごとに採用している数え方が違うため、同じ文章でも結果が変わります。
実例: 同じ「1文字」がこう変わる
次の表は、実際に Yomikumi の文字数カウントで計測した値です。「入力」列の文字はそのままコピーして試せます。
| 入力 | 内部の構成 | 見た目(書記素) | コードポイント | UTF-16コード単位 |
|---|---|---|---|---|
あいう | ひらがな3文字 | 3 | 3 | 3 |
𩸽 | 「ほっけ」U+29E3D(1コードポイント) | 1 | 1 | 2 |
ば | 「は」U+306F+結合濁点U+3099 | 1 | 2 | 2 |
👨👩👧👦 | 家族の絵文字。4人をZWJで連結(7コードポイント) | 1 | 7 | 11 |
🇯🇵 | 国旗の絵文字。地域指示記号2つ | 1 | 2 | 4 |
1️⃣ | キーキャップ絵文字。1+VS16+囲みキーキャップ | 1 | 3 | 3 |
表の「ば」は、キーボード入力では合成済みの1コードポイント(U+3070)になることが多い一方、コピー元や保存形式によっては「は(U+306F)+結合濁点(U+3099)」の2コードポイントになることがあります。多くの環境で同じに見えても、内部の構成によって数値が変わります。
Yomikumi の文字数カウントは3つとも表示する
yomikumi.com/counter/ に文章を貼り付けると、3つの数え方が並んで表示されます。挙動は次のとおりです。
- 主表示は「見た目の1文字(書記素)」で、改行を含みません。Yomikumi では、原稿の分量を見積もる用途を想定してこの既定にしています(トグルで改行込みにも切り替えられます)。
- 空白を除いた文字数も表示します。半角・全角スペース、タブ、改行が除外の対象です。
- ルビ記法(青空文庫記法)を含む文章は2系列で表示します: 記法込み(入力そのまま)と、親文字のみ(
|・《ルビ》を除いた本文)。記法の詳細は青空文庫のルビ記法の記事を参照してください。 - 行数と原稿用紙換算も同じ画面で確認できます。
どの数え方を見ればいい?
- 原稿の分量を知りたい: 主表示(見た目の1文字)が目安にしやすいです。
- 投稿サイト・応募フォームの字数制限: そのサービスがどの数え方を使うかはサービスごとに異なります。上限ぎりぎりの原稿は、最終的に提出先の画面で確認してください。
- プログラムやデータベースの制限: UTF-16コード単位、コードポイント、バイト数など、採用する単位は製品や項目ごとに異なります。対象システムの仕様を確認してください。
確認点と制限
- 数えられるのは 1,000,000 UTF-16コード単位までです。超えると計測せず、分割を案内します(20万単位を超えると計測に時間がかかる旨の表示が出ます)。
- 「概算」バッジが表示される環境では、書記素の分割が簡易方式になります(古いブラウザなど)。
- バイト数(UTF-8 など)の表示には対応していません。
原稿の保存と送信について
Yomikumi のアプリケーションコードとサーバーは、入力した本文を送信しません。処理はブラウザ内で行われます。
文字数カウント(無料・登録不要) 見た目の1文字・コードポイント・UTF-16コード単位を並記し、数え方の定義つきで表示。空白除外・行数・原稿用紙換算にも対応。Yomikumiは入力内容をサーバーへ送信せず、ブラウザ内で処理します。