文字数の数え方が違う理由:コードポイント・書記素・バイト
同じ文章でもツールによって文字数が変わるのは、コードポイント・書記素クラスタ・バイト数のどれで数えているかが違うためです。SNS や応募書類でどの基準を見るべきかを整理します。
3 つの「文字数」
「文字数」と一口に言っても、コンピュータ上では少なくとも 3 つの数え方があります。
| 基準 | 「𠮷野家🍣」の文字数 | 主な用途 |
|---|---|---|
| バイト数 (UTF-8) | 13 | データベースの容量、通信量 |
| コードポイント | 5 | 多くの文字数カウンター、X の文字数判定の基礎 |
| 書記素クラスタ | 4 | 人が見て「1 文字」と感じる単位 |
「𠮷」は UTF-16 で 2 つのコード単位 (サロゲートペア) に分かれるため、JavaScript の "𠮷".length は 2 を返します。一方 Array.from("𠮷").length は 1 です。結果が食い違うカウンターは、この length をそのまま使っていることが多いです。
書記素クラスタとは
絵文字の肌の色や国旗、結合文字 (「か」+「゛」で「が」を表す形) は、複数のコードポイントで 1 つの見た目を作ります。この見た目の単位を書記素クラスタと呼び、Intl.Segmenter で数えられます。人が原稿用紙に書くときの感覚に最も近いのはこの数え方です。
どの基準を見ればよいか
- SNS の投稿制限: サービスごとに独自ルールがあります。X は全角を 2、半角を 1 として 280 の枠で数え、URL は長さに関係なく 23 文字換算です。公式の文字数表示を最終判断にしてください。
- 応募書類・小論文: 人が読む前提なので書記素またはコードポイントで数えれば実務上の差はありません。ただし句読点や空白を含めるかどうかは募集要項の指示に従います。
- プログラムの入力制限: バイト数か UTF-16 コード単位で制限されていることが多く、絵文字を含む文章は見た目より早く上限に達します。
自分で確かめる
文字数カウントはコードポイント単位で数え、空白・改行の除外を切り替えられます。絵文字や旧字体を含む文章で、length ベースのカウンターとの差を試してみてください。
参考: Unicode Standard Annex #29 “Unicode Text Segmentation” (https://unicode.org/reports/tr29/)