切り詰める前に確認

見える長さとエンコード後の長さを比較

対話型ワークスペースは、書記素クラスタ、コードポイント、UTF-16コードユニット、厳密なUTF-8バイトを数えます。カスタム書記素上限を追加すると、残り許容量や超過量を確認できます。

文字数カウンターを読み込んでいます…

テキストを解析するにはJavaScriptを有効にしてください。下のUnicode長さの定義、例、上限ガイダンスはそのまま利用できます。

1つの文字列、4つの正しい長さ

書記素・コードポイント・コードユニット・バイトを意図的に選ぶ

人が「文字数制限」に期待するのは、見える単位に従うことです。アクセント付き文字や結合された絵文字がバラバラにされては困ります。Unicodeはここで使う実用的な境界を拡張書記素クラスタと呼びます。これはユーザーが知覚する文字の近似であり、すべてのフォント・言語・編集作業がすべての列を同じに扱う保証ではありません。

コードポイントはU+0065やU+1F600のように表記されるUnicode符号空間の値です。ECMAScript文字列は3つ目の層として16ビットコードユニットの列を露出します。U+FFFFを超えるコードポイントはサロゲートペアを占有するため、"😀".lengthは2になります。ファイルやネットワークペイロードは、文字列がUTF-8バイトにエンコードされると4つ目の層を加えます。

このカウンターが4層すべてを報告するのは、上限が契約だからです。バイト単位のデータベース列、UTF-16ユニット単位のJavaScript API、見える書記素単位の製品フィールドは、同じテキストを異なる量だけ受け入れます。単位と正規化ポリシーが名指しされるまで「500文字」という表示は不完全です。

書記素クラスタ
見える文字を近似するロケール対応の拡張境界。
コードポイント
コードポイント反復で得られるUnicode符号値。
UTF-16コードユニット
JavaScriptの文字列長が数える16ビット要素。
UTF-8バイト
すべてのスカラー値が有効な場合の厳密なエンコード長。
カスタム上限
残り・超過が表示される書記素の許容量。

小さな例が層を明かす

同じ見た目の長さでも必要な格納域は異なります

テキストと表現書記素 · ポイント · ユニットUTF-8バイト
é · U+00E91 · 1 · 12バイト: C3 A9
é · U+0065 U+03011 · 2 · 23バイト: 65 CC 81
😀 · U+1F6001 · 1 · 24バイト: F0 9F 98 80
👨‍👩‍👧‍👦 · 結合された家族1 · 7 · 1125 UTF-8バイト

最初の2行は通常同じアクセント付き文字として描画されます。このカウンターは意図的に正規化しないため、内部の長さは区別されたままです。家族の絵文字列は4つの絵文字と3つのゼロ幅接合子からなり、構成コードポイントを個別に削除できる「文字」と扱うと、見た目に壊れた結果が残ることがあります。

Unicode境界アルゴリズム

書記素境界は現在の分割データに依存します

書記素の合計は書記素単位のIntl.Segmenterを使用します。このAPIはロケールネゴシエーションと実装のUnicode境界データに従います。Unicode Standard Annex #29は結合記号、絵文字モディファイア、地域インジケーター、ゼロ幅接合子列の挙動を含む既定の拡張書記素クラスタ規則を定義し、ECMA-402はJavaScriptの分割インターフェースを定義します。

境界の挙動はブラウザーから独立して凍結されているわけではありません。新しいエンジンは更新されたUnicodeプロパティやロケール調整を反映でき、専門エディターは既定アルゴリズムにドメイン固有の規則を重ねる場合があります。上限の判断を正確に監査する必要があるなら、元のテキストを保存し実行環境を記録してください。

書記素数はカーソル移動とユーザー向け上限のためのものですが、視覚的な幅は測りません。1つのクラスタは狭くも広くも不可視にもなり得て、欠落グリフの箱として描画されたり、隣接文字と結合されたりします。レイアウト上限には文字列分割に加えてフォント・レンダリングの測定が必要です。

編集ボリュームを数えますか?

書記素は見える文字の問いに答えます。単語と文にはロケール対応の単語・文境界規則と、別個の段落・行の定義が必要です。

ワードカウンターを開く →

受け手の契約に合わせる

見える文字のポリシーにはカスタム書記素上限を

  1. 1

    単位を名指す

    受け手が書記素、コードポイント、UTF-16コードユニット、エンコードバイトのどれを制限しているか確認します。「文字」という語から推測しないでください。

  2. 2

    許容量を設定する

    カスタム書記素上限を入力し、残りの見えるクラスタ数や現在のテキストの超過量を追跡します。

  3. 3

    安全に切り詰める

    契約が書記素なら書記素境界でのみ切ります。輸送や保存に別のバイト上限があれば、その後バイトを再確認してください。

カスタム上限は、テキストエリアの値を受け取った後に書き換え・切り詰め・Unicode正規化を行いません。テキストエリアのHTML動作は解析前にCRLFとCRをLFに変換します。別の正規化を適用したり制御文字を除去したり異なるUnicodeバージョンを数えたりするサービスは異なる結果を出す可能性があるため、代表的な絵文字と結合列を実際の宛先でテストしてください。

正確な入力、厳密なエンコード

正規化と単独サロゲートはバイトの問いを変えます

テキストエリアの値にNFC、NFD、NFKC、NFKDの変換は適用されません。テキストエリアのHTML動作がすでにCRLFとCRをLFに変換しているため、ソースとバイト単位で比較する際はこの変換を織り込む必要があります。Unicode正規化は、受け手のプロトコルが名指しの形式を要求する場合にのみ行ってください。署名、ハッシュ、データベースキー、バイト契約はそれぞれの規則に従います。

通常通り入力されたほとんどのテキストはUnicodeスカラー値から成りますが、JavaScriptの文字列は単独の上位・下位サロゲートを含めます。ECMAScriptのString型はwell-formed UTF-16ではない16ビット値の列を許します。単独サロゲートにはUTF-16コードユニット数はありますが、Unicodeスカラー値としての直接的なUTF-8エンコードはありません。

ウェブのWHATWG TextEncoderはUSVStringを受け入れ、UTF-8エンコードの前に単独サロゲートをU+FFFDに変換します。この置換は相互運用に有用ですが、その3バイトは元のコードユニットを保存するエンコードではありません。そのためこのカウンターはUTF-8バイト長を利用不可として扱い、置換ベースの合計を黙って使う代わりに不正な入力を報告します。

テキストをバイトまで追跡

ASCII、Unicode、UTF-8、UTF-16、書記素、16進表記は関連しつつも別個の層です。

ASCII vs Unicode vs UTF-8を読む →

ローカル検査

カウントAPIへの要求なしでテキストを測定

計数はこのブラウザータブで実行されます。LiveParseは入力された文字列を文字数カウントのサービスにアップロードしたり、サーバー側の履歴を保存したりしません。下書き文、識別子、サンプルペイロードの露出を減らします。

ローカル処理は隔離されたデバイスを意味しません。ブラウザー拡張、クリップボードツール、アクセシビリティソフト、スクリーンショット、クラッシュレポート、OSはこのページの管理外にあります。測定の必要がない秘密値は取り除き、デバイスに適用されるデータ取り扱い規則に従ってください。

単語数と読了時間が必要ですか?

ロケール対応の単語・文分割、段落・行の計数、調整可能なペース推定に切り替えられます。

単語と文を数える →

質問と回答

文字数カウンターFAQ

このツールでの文字数とは何を意味しますか?

基本の文字数は、ユーザーが知覚する文字を近似する書記素クラスタ数です。Unicodeコードポイント、JavaScriptのUTF-16コードユニット、UTF-8バイトも併せて表示し、プラットフォームの正確な単位に合わせられます。

1つの絵文字が複数のコードポイントになる理由は?

1つの書記素に見える絵文字は、人・肌の色モディファイア・異体字セレクター・地域インジケーター・ゼロ幅接合子を含む列の場合があります。書記素分割はその列を1つに保ち、コードポイント計数は構成要素を明らかにします。

コードポイントとUTF-16コードユニットの違いは?

コードポイントはUnicodeの符号値です。UTF-16コードユニットはECMAScript文字列の16ビット値1つで、U+FFFFを超えるコードポイントはサロゲートペアで2ユニットを占有します。

ペアのないサロゲートはどう扱われますか?

ペアのないUTF-16サロゲートはUnicodeスカラー値ではありません。置換文字のバイトを黙って数える代わりに、厳密なUTF-8バイト結果を利用不可と表示し、不正な文字列を報告します。

Unicodeテキストを正規化しますか?

いいえ。テキストエリアの値にUnicode正規化は適用されません。事前合成のアクセント文字と基底文字+結合記号の列は区別されたままです。テキストエリアのHTML動作は解析前にCRLFとCRをLFに変換し、これはユニット数・バイト数に影響することがあります。

カスタム上限はバイト基準ですか?

いいえ。カスタム上限は書記素クラスタを追跡し、残数・超過を表示します。サービスの上限がコードポイント、UTF-16ユニット、UTF-8バイトで定義される場合は、対応する指標と比較してください。