文字数カウントの正しい数え方 - 全角/半角/バイト数の違い徹底解説
X (旧Twitter) の文字制限は140字、Instagramのキャプションは2,200字、Googleの検索結果タイトルは32字 (推奨)... 媒体によって「1文字」の数え方が違うことをご存知でしょうか。本記事では、全角・半角・サロゲートペア・絵文字・バイト数の違いを徹底解説します。
「1文字」は意外と複雑
「文字数を数える」と言葉では簡単に言いますが、コンピュータの世界では「1文字とは何か」が非常に曖昧です。具体例で見てみましょう。
| 文字 | 見た目の文字数 | JavaScript .length | UTF-8バイト数 | Unicode文字数 |
|---|---|---|---|---|
| あ | 1 | 1 | 3 | 1 |
| A | 1 | 1 | 1 | 1 |
| 𠮷 (吉の異体字) | 1 | 2 | 4 | 1 |
| 𩸽 (ホッケ) | 1 | 2 | 4 | 1 |
| 👨👩👧👦 (家族絵文字) | 1 | 11 | 25 | 7 |
このように、「人間の目には1文字」でも、コンピュータには複数文字として扱われるケースが多数あります。
主要な「文字数」の数え方5種類
1. 文字数 (Unicode コードポイント数)
最も「人間の感覚」に近い数え方。1つの文字を1としてカウント。Array.from(str).length で取得可能。
用途: SNS投稿数、ブログ記事数、文章執筆。
2. JavaScript .length (UTF-16コード単位数)
JavaScriptの str.length はUTF-16コード単位数を返します。基本多言語面 (BMP) の文字は1、それ以外 (絵文字や異体字) は2としてカウント。
注意: 「𠮷」のような サロゲートペア文字は2文字として数えられてしまうため、正確な文字数とは異なります。
3. バイト数 (UTF-8)
ストレージ消費量・通信量で重要。半角英数は1バイト、全角文字は通常3バイト、絵文字は4バイト。
用途: データベース設計、API通信制限、CDN転送量計算。
4. バイト数 (Shift_JIS)
古い日本のシステムで使われる。半角1バイト、全角2バイト。
用途: レガシーシステム、CSV、固定長レコード。
5. 文字数 (空白を除く)
原稿料計算等で使われる。str.replace(/\s/g, '').length。
主要メディアの文字数制限
| メディア | 項目 | 制限 | 数え方 |
|---|---|---|---|
| X (旧Twitter) | ツイート | 140字 (日本語) 280字 (英数字) | 独自の Twitter Text Parsing |
| X Premium | 長文ツイート | 25,000字 | 同上 |
| キャプション | 2,200字 | UTF-16コード単位 | |
| ハッシュタグ | 30個まで | 個数 | |
| 投稿 | 63,206字 | UTF-16コード単位 | |
| 投稿 | 3,000字 | UTF-16コード単位 | |
| YouTube | 動画タイトル | 100字 | UTF-8バイト数換算あり |
| YouTube | 説明欄 | 5,000字 | 同上 |
| Google検索 | タイトルタグ | 30-35字推奨 | 表示ピクセル幅 |
| Google検索 | meta description | 120-160字推奨 | 表示ピクセル幅 |
| LINE 公式 | メッセージ | 10,000字 | UTF-16コード単位 |
| note | 記事タイトル | 50字以内推奨 | 表示幅 |
サロゲートペア・絵文字の罠
「𠮷野家」「𩸽の塩焼き」のように、サロゲートペア文字が含まれる文章を扱う場合は要注意です。
// ❌ 間違った数え方
"𠮷野家".length // → 4 (実際は3文字)
// ✓ 正しい数え方
[..."𠮷野家"].length // → 3
Array.from("𠮷野家").length // → 3
絵文字も同様です。特に ZWJ (Zero Width Joiner) でつながれた絵文字は、見た目1文字でも内部的には複数文字扱いになります。
"👨👩👧👦".length // → 11 (見た目1文字)
[..."👨👩👧👦"].length // → 7 (それでも7)
家族絵文字は「男性 + ZWJ + 女性 + ZWJ + 女の子 + ZWJ + 男の子」という7つのUnicode文字の組み合わせなのです。
全角・半角の見分け方
「アルファベットでも全角と半角がある」というのは日本人の常識ですが、コンピュータ的には別の文字です。
| 種類 | 例 | Unicode範囲 |
|---|---|---|
| 半角英数 | A B 1 2 | U+0020 - U+007E |
| 半角カナ | ア イ ウ | U+FF61 - U+FF9F |
| 全角英数 | A B 1 2 | U+FF01 - U+FF5E |
| 全角ひらがな | あいう | U+3041 - U+3096 |
| 全角カタカナ | アイウ | U+30A1 - U+30FC |
| 漢字 (CJK統合漢字) | 日本語 | U+4E00 - U+9FFF |
本サイトの文字数カウントツール
本サイトの文字数カウントツールは、以下の8つの数え方を同時に表示します。
- 文字数 (サロゲートペア正しく1文字カウント)
- 文字数 (空白を除く)
- 文字数 (改行を除く)
- バイト数 (UTF-8)
- 行数
- 単語数 (英数字の連続)
- 全角文字数
- 半角文字数
巨大なテキスト (100万文字以上) も処理スキップで対応。50万字超は自動デバウンスで動作軽量化。完全無料・登録不要・ブラウザ内処理 (入力データは外部送信されません)。
関連機能
- 全角半角変換ツール: 全角⇔半角の双方向変換
- ひらがな⇔カタカナ変換
- 行数カウント: コード行数測定など
まとめ
- 「1文字」の定義は媒体・用途で異なる
- JavaScriptの
str.lengthはサロゲートペアを正確に数えられない - SNSでの実用文字数チェックには Array.from(str).length または専用ツールが必須
- 絵文字、特にZWJ結合絵文字は内部的に多文字
- バイト数 (UTF-8/Shift_JIS) はストレージ・通信時に重要
SNS投稿前・記事執筆中の文字数チェックには、本サイトの文字数カウントツールをご活用ください。