1. 同じ文章でも数が変わる理由
日本語の「あ」や英数字の「A」は、どの数え方でも1文字です。しかし、絵文字や結合文字は内部構造が複雑で、見た目とデータの持ち方が一致しません。
たとえば、家族の絵文字「👨👩👧👦」は、画面上では1つの絵文字に見えます。しかし内部では、4人の人物と3つの結合記号(ZWJ)からできています。そのため、見た目は1、コードポイントは7、UTF-16は11になります。
2. 3つの数え方
| 数え方 | 何を数えるか | 向いている用途 | 注意点 |
|---|---|---|---|
| 見た目の文字 | 人が1文字と感じる単位(grapheme cluster) | 文章の長さ、原稿、SNS投稿の感覚 | 媒体の独自ルールとは一致しないことがある |
| コードポイント | Unicodeの符号位置 | 文字コードの確認、プログラムの仕様 | 絵文字や結合文字は複数になる |
| UTF-16コード単位 | JavaScriptなどの文字列長 | Webプログラムの内部処理 | 絵文字の多くは2単位。見た目とずれる |
3. 具体例で比べる
代表的な文字列で、3つの数え方がどう変わるかを見てみます。表の「見た目」は、このサイトの文字数カウンターと同じgrapheme clusterの数です。
| 文字列 | 見た目 | コードポイント | UTF-16 | 補足 |
|---|---|---|---|---|
| あ | 1 | 1 | 1 | 日本語の1文字 |
| A | 1 | 1 | 1 | 半角英字 |
| 😀 | 1 | 1 | 2 | サロゲートペア |
| 👍🏽 | 1 | 2 | 4 | 肌色の修飾子が付く |
| 🇯🇵 | 1 | 2 | 4 | 2つの地域表示記号 |
| か + 結合濁点 | 1 | 2 | 2 | 結合文字で1つの見た目 |
| 👨👩👧👦 | 1 | 7 | 11 | ZWJでつながる家族の絵文字 |
| a(改行)b | 3 | 3 | 3 | 改行を1文字として数える |
| a b | 3 | 3 | 3 | 空白を除くと2 |
| 。 | 1 | 1 | 1 | 句読点も1文字 |
表の数値は、このサイトの実装とUnicodeの一般的な扱いに基づく例です。OS・ブラウザ・アプリの内部処理によって、同じ文字列でも表示や数え方が変わる場合があります。
4. 改行と空白は含む?
「文字数」に改行を含めるかは、用途によって変わります。原稿用紙の枚数、SNSの投稿、プログラムの入力制限では、それぞれ違うルールが使われます。
- 改行を含む:文章全体のデータ量や、入力欄の制限を見るとき。
- 改行を除く:段落の切り方を無視して、本文の長さを見たいとき。
- 空白・改行を除く:単語数に近い感覚で、実質的な文字の量を見たいとき。
このサイトでは、3つを同時に表示します。どの数が正解かは、提出先・媒体・目的によって変わります。
5. 媒体によってルールが違う
SNSや投稿サービスは、独自の数え方を持っています。URLを一定の文字数として扱う、特定の文字を2文字として数える、絵文字を2文字として扱う、といった規則です。汎用の文字数カウンターは、あくまで参考値と考えてください。
媒体別の考え方はX・Instagram・noteの文字数と数え方で整理しています。投稿前には、必ず各サービスの公式ヘルプも確認してください。
6. どれを見ればいい?
- 文章を書くとき:見た目の文字数を基準にすると、読みやすさと感覚が合いやすい。
- 媒体の上限を確認するとき:その媒体の公式ルールを優先する。
- プログラムを書くとき:コードポイントとUTF-16の違いを意識する。JavaScriptの
lengthはUTF-16の単位。 - 文字コードを調べるとき:コードポイントやバイト数を確認する。
7. このサイトのカウンター
文字数カウントでは、見た目の文字数を主表示にし、コードポイントとUTF-16を参考値として並べています。改行・空白を除いた数、行数、段落数、目標文字数との差も確認できます。
入力した文章はブラウザ内で処理し、サーバーへ送信しません。ただし、広告・解析・ブラウザ拡張など、別の仕組みがページにアクセスする可能性はあります。機密情報や個人情報は貼らないでください。