文字数・バイト数カウント【無料・登録不要】UTF-8・Shift_JIS・UTF-16のバイト数と表せない文字の場所を表示
文章を貼り付けるだけで、文字数・行数と、UTF-8・Shift_JIS・UTF-16 のバイト数をまとめて数えられる無料ツールです。絵文字(👨👩👧👦 など)や濁点を組み合わせた文字も、見た目どおり 1 文字として数えます。入力と同時に結果が更新されます。
Shift_JIS で表せない文字(絵文字や「〜」など)や、Windows だけで使える機種依存文字(①、髙 など)があれば、「何行目の何文字目」かを表示し、ボタン 1 つで入力欄の該当箇所を選択できます。入力した文章はお使いのブラウザの中だけで処理され、サーバーには一切送信されません。
お使いのブラウザは絵文字の組み合わせなどを 1 文字として判定する機能(Intl.Segmenter)に対応していないため、文字数はコードポイント単位で数えています。
| 文字コード | バイト数 | BOM 付き |
|---|---|---|
| UTF-8 | 0 | 3 |
| Shift_JIS | 0 | ― |
| UTF-16 | 0 | 2 |
参考:コードポイント数 0 / UTF-16 のコード単位数(JavaScript の length) 0
Windows(CP932)の Shift_JIS では表せますが、JIS 規格どおりの Shift_JIS にだけ対応したシステムでは文字化けやエラーになることがあります。
入力した文章はお使いのブラウザ内だけで処理されます。サーバーへの送信や保存は一切行いません。
使い方
文字数とバイト数を数える
- 入力欄に文章を入力するか、貼り付けます。
- 入力と同時に、文字数・行数と、文字コードごとのバイト数が表示されます。
- 試しに使ってみたいときは「サンプルを入れる」を押します。「クリア」で入力欄を空にできます。
Shift_JIS で表せない文字を探す
- 文章を入力すると、Shift_JIS で表せない文字があれば、黄色の枠に「何行目の何文字目」と文字のコード(U+1F600 など)が一覧で表示されます。
- 一覧の「選択」を押すと、入力欄の該当する文字が選択された状態になります。そのまま別の文字に打ち替えられます。
- 「〜」(波ダッシュ)のように、似た文字に置き換えれば表せるものは、置き換え先の文字も表示します。
①や髙などの機種依存文字は、Shift_JIS のバイト数には含めたうえで、灰色の枠に別に一覧表示します。古いシステムや Windows 以外の環境にデータを渡す前の確認に使えます。一覧は、それぞれ最初の 100 個まで表示します。
改行の数え方を選ぶ
改行は、ファイルに保存するときの形式によってバイト数が変わります。「オプション」の「改行の数え方」で選んでください。
- LF(初期設定):改行 1 つを LF の 1 文字として数えます。Linux や Mac、Web のフォームなどで一般的な形式です。UTF-8・Shift_JIS では 1 バイト、UTF-16 では 2 バイトです。
- CRLF:改行 1 つを CR と LF の 2 文字として数えます。Windows のメモ帳などで CRLF のまま保存したファイルのサイズを知りたいときに選びます。UTF-8・Shift_JIS では 2 バイト、UTF-16 では 4 バイトです。
どちらを選んでも、「文字数」では改行 1 つを 1 文字として数えます。CRLF に切り替わるのは、バイト数と、参考に表示するコードポイント数・UTF-16 のコード単位数です。なお、ブラウザの入力欄は CRLF の文章を貼り付けても改行を LF に変えて扱うため、元のファイルの改行が CRLF でも、オプションで CRLF を選ばない限り LF として数えます。
このツールの数え方
| 項目 | 数え方 |
|---|---|
| 文字数 | 見た目の 1 文字(書記素クラスタ)を 1 文字として数えます。改行も 1 文字です。 |
| 改行を除く | 文字数から改行を除いた数です。 |
| 空白・改行を除く | さらに、半角スペース・全角スペース・タブなどの空白を除いた数です。 |
| 行数 | 改行の数+1 です(何も入力していないときは 0)。最後が改行で終わる文章は、その後ろの空の行も 1 行として数えます。エディターの行番号と同じ数え方です。 |
| 空行を除いた行数 | 何も書かれていない行と、空白だけの行を除いた行数です。 |
| バイト数 | BOM(文字コードを示す先頭の印)を付けないときのバイト数です。BOM を付けて保存するときの値も、UTF-8(+3 バイト)と UTF-16(+2 バイト)で表示します。 |
| 参考の数 | コードポイント数(Unicode の文字番号の数)と、UTF-16 のコード単位数(JavaScript の length と同じ値)も表示します。 |
見た目の 1 文字の判定には、ブラウザに組み込まれている Intl.Segmenter という機能を使っています。この機能がない古いブラウザでは、コードポイント単位で数え、その旨をツールに表示します。
文字数とバイト数の違い
文字数は、人が見て数える文字の数です。バイト数は、その文字をコンピューターの中で表すのに使うデータの量(1 バイト=8 ビット)です。コンピューターは文字を「文字コード」というルールで数値に置き換えて保存しており、1 文字に何バイト使うかは、文字の種類と文字コードによって変わります。
| 文字 | 文字数 | UTF-8 | Shift_JIS | UTF-16 |
|---|---|---|---|---|
| A(半角英字) | 1 | 1 バイト | 1 バイト | 2 バイト |
| ア(半角カタカナ) | 1 | 3 バイト | 1 バイト | 2 バイト |
| あ(ひらがな) | 1 | 3 バイト | 2 バイト | 2 バイト |
| 漢(漢字) | 1 | 3 バイト | 2 バイト | 2 バイト |
| ①(機種依存文字) | 1 | 3 バイト | 2 バイト | 2 バイト |
| 😀(絵文字) | 1 | 4 バイト | 表せない | 4 バイト |
| 👨👩👧👦(家族の絵文字) | 1 | 25 バイト | 表せない | 22 バイト |
家族の絵文字「👨👩👧👦」は、画面では 1 文字ですが、実際には 4 人の絵文字を「ゼロ幅接合子(U+200D)」という見えない文字で 3 か所つないだ、合計 7 個の文字(コードポイント)でできています。そのため UTF-8 では 25 バイトになります。このツールは文字数を 1、コードポイント数を 7 と表示します。
データベースの項目や、システムの入力欄に「何バイトまで」という制限があるときは、文字数ではなくバイト数で確認する必要があります。たとえば「全角 10 文字まで」の項目は、Shift_JIS では 20 バイト、UTF-8 では 30 バイトに相当します。
JavaScript の length と文字数がずれる理由
JavaScript の文字列の length は、文字数ではなく UTF-16 のコード単位(2 バイトずつの区切り)の数を返します。😀 のような絵文字は UTF-16 で 2 単位(サロゲートペア)を使うため、"😀".length は 2 になります。見た目の文字数を数えたいときは、このツールと同じく Intl.Segmenter を使います。
文字コードによってバイト数が変わる理由
文字コードごとに、文字を数値に置き換えるルールが違うためです。
- UTF-8:世界中の文字を 1〜4 バイトで表します。半角英数字は 1 バイト、ひらがな・カタカナ・漢字の多くは 3 バイト、絵文字は 4 バイトです。半角カタカナも 3 バイトになります。
- Shift_JIS:日本語用の文字コードです。半角英数字と半角カタカナは 1 バイト、全角の文字は 2 バイトです。絵文字や、日本語以外の多くの文字は表せません。
- UTF-16:ほとんどの文字を 2 バイトで表し、絵文字など一部の文字は 4 バイト(サロゲートペア)で表します。半角英数字も 2 バイトです。
それぞれの文字コードの仕組みは、「UTF-8とは?仕組み・バイト数・BOMの有無をわかりやすく解説」と「Shift_JISとは?特徴と文字化け・機種依存文字・5C問題の注意点」で詳しく解説しています。
このツールの Shift_JIS の基準(Windows の CP932 との違い)
Shift_JIS には、JIS 規格どおりのものと、Windows で使われている拡張版の Windows-31J(CP932)があります。このツールは、ブラウザの標準仕様(WHATWG Encoding Standard)の Shift_JIS の変換表を使います。この変換表は Windows の CP932 とほぼ同じで、①・Ⅰ・㈱ などの NEC 特殊文字や、髙・﨑 などの IBM 拡張文字も 2 バイトとして数えます。これらの機種依存文字は、灰色の枠に別に一覧表示します。
Unicode の基本的な範囲(U+0000〜U+FFFF)のすべての文字について、Python の cp932 で変換したバイト数と照合したところ、次の文字以外はすべて同じでした。
| 文字 | このツール | Python の cp932 |
|---|---|---|
| 〜(U+301C 波ダッシュ)、‖、¢、£、¬ | 表せない文字として警告(似た文字 ~ ∥ ¢ £ ¬ を案内) | ~ などと同じコードに変換(2 バイト) |
| ¥(U+00A5)、‾(U+203E) | 1 バイト(0x5C、0x7E) | 変換できない(エラー) |
| 外字(私用領域 U+E000〜U+E757) | 表せない文字として警告 | 2 バイト(0xF040〜0xF9FC) |
「〜」(U+301C)などを警告するのは、ブラウザや Windows で Shift_JIS の 0x8160 を読み込むと「~」(U+FF5E、全角チルダ)になり、元の文字に戻らないためです。これがいわゆる「波ダッシュ問題」です。また、ⅰ(小文字のローマ数字)や一部の IBM 拡張漢字は、このツールと Python の cp932 でバイトの値が違いますが(このツールは 0xFA〜0xFC、Python は 0xED〜0xEE)、どちらも 2 バイトなのでバイト数は同じです。
なお、JIS 規格どおりの Shift_JIS(Python の shift_jis)では、①や髙などの機種依存文字は変換できません。相手のシステムが Windows-31J に対応しているかわからないときは、灰色の枠に表示された文字を別の書き方(①→(1) など)に置き換えておくと安全です。
コマンドでバイト数を確かめる
Python がインストールされた Windows では、次のコマンドで UTF-8 のバイト数を数えられます。「あいう」なら 9 と表示されます。
py -c "print(len('あいう'.encode('utf-8')))"
Shift_JIS(Windows-31J)のバイト数は、次のコマンドで数えられます。「あいう」なら 6 と表示されます。'cp932' を 'shift_jis' に変えると JIS 規格どおりの Shift_JIS で変換するため、①などの機種依存文字を含むと UnicodeEncodeError になります。
py -c "print(len('あいう'.encode('cp932')))"
PowerShell だけで数えるときは、次のコマンドを使います。「あいう」なら 6 と表示されます。ただし、この方法では Shift_JIS で表せない文字が「?」(1 文字ごとに 1 バイト。😀 は 2 バイト)に置き換えられて数えられるので、絵文字などを含む文章では、このツールと結果が変わります。
[System.Text.Encoding]::GetEncoding(932).GetByteCount("あいう")
よくある質問
絵文字は何文字として数えますか?
見た目どおり 1 文字として数えます。肌の色を変えた絵文字(👍🏽)や国旗(🇯🇵)、家族の絵文字(👨👩👧👦)のように、複数の文字を組み合わせた絵文字も 1 文字です。組み合わせた文字の数は、参考の「コードポイント数」で確認できます。
半角カタカナの「ガ」は何文字になりますか?
1 文字として数えます。Unicode の「見た目の 1 文字」の規則では、半角の濁点「゙」と半濁点「゚」は前の文字とひとまとまりになるためです。バイト数は「カ」と「゙」の合計で、Shift_JIS では 2 バイト、UTF-8 では 6 バイトです。
「全角は 2、半角は 1」で数えた文字数を知りたいです
Shift_JIS のバイト数がその数え方に近くなります。Shift_JIS では半角英数字と半角カタカナが 1 バイト、全角の文字が 2 バイトだからです。ただし、Shift_JIS で表せない文字はバイト数に含まれないので、警告が出ていないことを確認してください。
「〜」が Shift_JIS で表せないと表示されます
入力した環境やコピー元によっては、「〜」が U+301C(波ダッシュ)という文字になっていることがあります。この文字は Windows の Shift_JIS では表せません。Windows で使われている「~」(U+FF5E 全角チルダ)に置き換えると表せます。ツールの一覧の「選択」を押すと入力欄で該当の文字が選択されるので、そのまま打ち替えてください。
ファイルのサイズと、表示されたバイト数が違います
次の点を確認してください。改行が CRLF のファイルなら、「改行の数え方」を CRLF にします。BOM 付きのファイルなら「BOM 付き」の列の値を見ます。また、ファイルの最後に改行があるかどうかでも 1〜2 バイト変わります。
入力したデータは保存されませんか?
保存されません。数える処理はすべてお使いのブラウザの中で行われ、サーバーへの送信も保存も行いません。ページを閉じると入力内容は消えます。社外秘の文書や個人情報を含む文章でも、外部に送られる心配はありません。
関連する記事・ツール
- 文字コードとは?UTF-8・Shift_JIS・EUC-JPの違いと文字化けの原因・直し方
- UTF-8とは?仕組み・バイト数・BOMの有無をわかりやすく解説
- Shift_JISとは?特徴と文字化け・機種依存文字・5C問題の注意点
- 文字化け復元・文字コード変換
- Base64エンコード・デコードツール【無料・登録不要】日本語・ファイル対応
- URLエンコード・デコードツール【無料・登録不要】日本語URLの変換・クエリ分解に対応