文字数カウントツール
- 文字数
- 文字
- 空白を除いた文字数
- 文字
- 行数
- 行
- UTF-8バイト数
- bytes
空白を除いた文字数では、スペース、タブ、改行を除いて数えます。
入力すると自動で集計します。
このツールでできること
入力した文章の文字数をリアルタイムに数えます。空白を含む文字数と除いた文字数に加えて、行数とUTF-8バイト数も同時に確認できます。
絵文字や結合文字を含む文章では、単純なデータ長ではなく、できるだけ画面上の見た目に近い単位で「文字数」を確認できます。一方、投稿サービス独自の上限判定ではなく、入力した本文そのものを数えるツールです。
使い方
- 入力欄へ文章を入力または貼り付けます。
- 入力と同時に更新される集計結果を確認します。
- 最初からやり直すときは「クリア」を押します。
入力例・出力例
Aあ😀と入力すると、対応ブラウザでは文字数3、空白を除いた文字数3、行数1、UTF-8バイト数8と表示します。UTF-8ではAが1バイト、あが3バイト、😀が4バイトです。
末尾に改行を1つ追加すると総行数は2行になります。入力欄内で文章が自動折り返しされても、改行文字がなければ行数は増えません。
よくある利用場面
- フォーム、原稿、タイトル等の文字数とUTF-8バイト数を確認するとき
- 絵文字や結合文字を含む文章の見た目に近い文字数を調べるとき
- 空白を含む場合と除く場合の文字数差を比較するとき
仕組み・詳しい解説
「1文字」には複数の数え方がある
このツールは、対応ブラウザではJavaScriptのIntl.Segmenterを使い、書記素クラスタ単位で「文字数」を数えます。書記素クラスタは、複数のUnicodeコードポイントから成る結合文字や絵文字の並びを、利用者が1文字と感じやすいまとまりとして扱うための単位です。Unicode標準でも、利用者が認識する文字の実用的な近似として説明されています(Unicode Standard Annex #29)。
同じ入力でも、数える単位によって次のように値が変わります。
| 入力 | 書記素クラスタ | Unicodeコードポイント | UTF-16コードユニット | UTF-8バイト |
|---|---|---|---|---|
😀 |
1 | 1 | 2 | 4 |
か+結合用濁点(U+3099) |
1 | 2 | 2 | 6 |
👨👩👧👦 |
1 | 7 | 11 | 25 |
このツールの「文字数」は表の書記素クラスタ、「UTF-8バイト数」は右端の値に対応します。JavaScriptの文字列の単純なlengthはUTF-16コードユニット数になるため、このツールでは文字数の計算に使用していません。
非対応ブラウザでの数え方
Intl.Segmenterを利用できないブラウザでは、Unicodeコードポイント単位へ切り替え、画面にも注意を表示します。この場合、😀は1文字のままですが、か+結合用濁点は2文字、家族の絵文字👨👩👧👦は7文字になります。絵文字を構成する肌の色、結合記号、国旗等でも、対応ブラウザと結果が異なることがあります。
UTF-8バイト数が表すもの
UTF-8バイト数は、入力本文をUTF-8へ符号化したときのデータ量です。対応ブラウザでは、UTF-8のみを扱うTextEncoderの符号化結果を数えています(WHATWG Encoding Standard)。文字数とバイト数は同じものではなく、ASCII文字は1バイト、日本語の多くは1文字3バイト、絵文字は1つのコードポイントにつき4バイトになる例があります。複数のコードポイントから成る絵文字は、見た目が1文字でも合計バイト数が大きくなります。
BOM、ファイル形式の管理情報、保存時に追加・変換される改行等は含まないため、実際のファイル容量は別に確認してください。
処理仕様
- 「文字数」はスペース、タブ、改行を含みます。
- 「空白を除いた文字数」は半角・全角スペース、タブ、改行等を除きます。
- 空の入力は0行です。空行と末尾の改行で生じる行は行数に含めます。入力欄内の自動折り返しは含めません。
- HTMLタグやMarkdown記号も入力された文字として数えます。
注意点
- 書記素クラスタは見た目に近い数え方ですが、すべての言語やサービスで使われる唯一の「文字」の定義ではありません。
- SNS、広告文、フォーム等では、URLや絵文字を独自の方法で数える場合があります。各サービスの上限を厳密に判定する用途では、そのサービスの公式仕様も確認してください。
- アプリ独自の入力上限はありませんが、非常に長い文章ではブラウザ環境によって集計に時間がかかる場合があります。
入力データについて
入力した文章は、お使いのブラウザ内だけで処理します。ToolRollのサーバーや外部サービスへ送信せず、ブラウザへ保存もしません。