文字数カウンター

スペースあり・なしのリアルタイム文字数、バイトサイズ、そしてツイートやmeta descriptionなど一般的なプラットフォームの上限にどれだけ近いかを表示します。

文字数(スペースあり)0
文字数(スペースなし)0
バイトサイズ(UTF-8)0

よくある上限

仕組み

キー入力のたびに、ページは3つの数値を再計算します。文字数は JavaScript の .length で、UTF-16 コードユニット数をカウントします。スペースなしのカウントは、まず正規表現ですべての空白(スペース、タブ、改行)を取り除きます。バイトサイズはブラウザの TextEncoder API にテキストを通し、そのテキストがファイルやデータベースの列、HTTPリクエストボディで実際に占める UTF-8 バイト数を算出します。プラットフォームの上限リストは、各上限との単純な引き算で、上限を超えた瞬間に「超過」スタイルに切り替わります。

これらの数値の差こそが落とし穴です。スマイリーのような絵文字は見た目には1つの記号ですが、UTF-16 では2コードユニット(そのためここでも多くのプラットフォームでも2文字としてカウントされます)、UTF-8では4バイトになります。特にSMSでは、160文字という上限は、メッセージが従来のGSM-7文字セット内に収まることを前提としています。絵文字1つやカーブした「スマート引用符」を1つ含めるだけで、キャリアはメッセージ全体を黙ってUCS-2エンコーディングに切り替え、セグメントあたりの上限が70文字まで下がります。1文字編集しただけで突然SMSが2セグメントに分かれてしまうのは、これが理由です。

カウントはすべてこのページのJavaScript内で行われます。入力中に開発者ツールのネットワークタブを開いてみてください。リクエストは一切発生しません。テキストがブラウザの外に出ることはないからです。