ツールについて
文字の符号化に注目したカウンターです。Unicodeコードポイント、書記素クラスタ、UTF-16コード単位、UTF-8バイト数を分けて表示するため、JavaScriptのstring.lengthを常に見た目の文字数と同一視する誤りを防げます。
使い方
- 文字、絵文字、結合アクセントを含む文字を入力します。
- コードポイント数、空白を除く文字数、UTF-8バイト数を確認します。
- 書記素クラスタとUTF-16コード単位を比較します。ブラウザーが書記素分割に対応していない場合は、その旨を表示します。
- 原文のコピーやサンプルの読み込みで、表現方法による違いを確認します。
使用例
- 😀:Unicodeコードポイント1個、UTF-16コード単位2個、UTF-8で4バイト。
- 👨👩👧👦:Unicodeコードポイント7個。grapheme分割に対応していれば書記素クラスタは1個です。
- eに結合アクセントを加えたéと合成済みのéは通常同じように見えますが、前者は2コードポイント、後者は1コードポイントです。
集計の規則
文字数とUnicodeコードポイント数はArray.from相当のコードポイント走査で集計します。UTF-16コード単位には元の文字列の長さ、UTF-8バイト数にはTextEncoderを使用します。書記素クラスタはIntl.Segmenterのgraphemeモードを優先します。Unicode正規化は行わず、結合文字の異なる符号化をそのまま保持します。元の改行文字も符号化の集計に含まれ、末尾の改行は最後の空行を作ります。1回の入力上限はUTF-16コード単位2,000,000個です。
主な用途
- API、ファイル、保存フィールドのUTF-8サイズを確認する。
- 絵文字による文字列長の違いを調べる。
- 字形、コードポイント、符号化単位の関係を理解する。
プライバシー
テキストの処理、ファイルの読み込み、変換、プレビューはすべて現在のブラウザー内で行います。入力をアップロードせず、バックエンド、データベース、オンラインAPI、外部CDNも使いません。内容の自動保存も行いません。コピーとダウンロードもブラウザー内で完結します。
FAQ
絵文字は何文字として数えますか?
単純な絵文字は1コードポイントの場合がありますが、家族、国旗、肌の色を組み合わせた絵文字は複数のコードポイントを含むことがあります。書記素クラスタの数が見た目の文字数により近い値です。
UTF-16の長さが文字数を上回るのはなぜですか?
基本多言語面を超えるコードポイントはUTF-16のサロゲートペアで表すため、1コードポイントが2コード単位を使う場合があります。
UTF-8バイト数はファイルサイズですか?
現在のテキストをUTF-8に符号化したときのバイト数です。追加のヘッダー、BOM、ファイルシステムのメタデータは含みません。
空白も数えますか?
通常の文字数には空白を含みます。「空白を除く文字数」ではスペース、Tab、改行、その他のUnicode空白を除外します。
Intl.Segmenterがない場合はどうなりますか?
コードポイント、UTF-16、UTF-8は引き続き計算できます。書記素クラスタの欄には、信頼できる数を提供できない旨を表示します。