mojisucount
文字数カウント mojisucount.com
Technical 約7分で読める

UTF-16とEUC-JPのバイト数とは?文字コード別の数え方をわかりやすく解説

UTF-16とEUC-JPのバイト数を比較するイメージ

同じ文章でも、UTF-8、UTF-16、Shift_JIS、EUC-JPではバイト数が変わります。たとえば「あ」は文字数では1文字ですが、UTF-16では2バイト、UTF-8では3バイト、EUC-JPでは多くの場合2バイトとして扱われます。フォームの入力制限、CSV連携、旧システムへの登録、APIの上限チェックでは、この違いを理解しておかないと「文字数は足りているのに送信できない」という問題が起きます。

この記事では、文字数カウントツールで表示されるUTF-16バイト数とEUC-JPバイト数の見方を、実務で迷いやすい例に絞って解説します。UTF-8やShift_JISとの違いを知りたい場合は、先に「Shift_JISとUTF-8の違い」もあわせて読むと流れがつかみやすくなります。

1. まず結論:文字数とバイト数は別物

文字数は、人が画面上で見る「文字の数」を数える考え方です。一方、バイト数は、その文字列を特定の文字コードで保存・送信するときに必要なデータ量を数えます。つまり、同じ「こんにちは」でも、どの文字コードで表すかによってバイト数が変わります。

見る指標 意味 使う場面
文字数 文章として何文字あるか レポート、SNS投稿、タイトル、原稿用紙換算
UTF-16バイト数 16ビット単位で表すUnicode系のデータ量 JavaScript文字列、Javaや一部DB、絵文字を含む文字列の確認
EUC-JPバイト数 日本語UNIX環境で使われてきた文字コードでのデータ量 旧システム、古いCSV、レガシーDB、文字化け調査

2. UTF-16バイト数の数え方

UTF-16は、Unicode文字を16ビットのコードユニットで表すエンコーディング方式です。基本的な日本語、英数字、記号の多くは1つの16ビットコードユニットで表せるため、1文字あたり2バイトとして数えられます。

ただし、絵文字や一部の漢字など、Unicodeの補助文字に入る文字は、UTF-16ではサロゲートペアという2つの16ビットコードユニットで表します。そのため、見た目は1文字でも4バイトになることがあります。

文字 見た目の文字数 UTF-16の目安 注意点
A 1文字 2バイト ASCIIでもUTF-16では基本的に2バイト
1文字 2バイト ひらがな・カタカナ・一般的な漢字も多くは2バイト
𠮷 1文字 4バイト サロゲートペアで表される異体字
😀 1つの絵文字 4バイト 多くの絵文字はサロゲートペア

3. EUC-JPバイト数の数え方

EUC-JPは、日本語UNIX環境で広く使われてきた日本語向け文字コードです。現在のWebではUTF-8が主流ですが、古い業務システム、研究機関のデータ、古いCSV、過去のデータベースではEUC-JPが残っていることがあります。

EUC-JPでは、ASCII文字は1バイト、日本語の多くの全角文字は2バイトで表されます。一方、半角カタカナや補助的な文字集合は扱いが異なり、実際のエンコード処理では2バイトまたは3バイトになるケースがあります。さらに、EUC-JPで表現できない文字は、変換時に置換されたりエラーになったりします。

文字の種類 EUC-JPの目安 実務上の注意
半角英数字 1バイト ASCIIとして扱える
ひらがな・カタカナ・一般的な漢字 多くは2バイト 日本語本文ではShift_JISと近いバイト数になることが多い
半角カタカナ 実エンコードでは2バイトになることがある 単純な「半角だから1バイト」とは限らない
絵文字・一部の異体字 表現できない場合がある 置換文字になり、元の文字情報が失われる可能性がある

4. UTF-8・UTF-16・Shift_JIS・EUC-JPの比較

日本語の文字数チェックでは、UTF-8だけでなく、UTF-16やShift_JIS、EUC-JPも見ると、システムごとの制限に気づきやすくなります。特に「日本語は何バイトか」という質問は、文字コードを指定しないと答えが変わります。

文字コード 半角英数字 一般的な日本語 絵文字・補助文字 主な用途
UTF-8 1バイト 多くは3バイト 多くは4バイト Web、API、現代的なシステム
UTF-16 2バイト 多くは2バイト 多くは4バイト JavaScript内部表現、Java、一部DBやWindows系API
Shift_JIS 1バイト 多くは2バイト 表現できない場合がある Windows系レガシー、古いCSV、業務システム
EUC-JP 1バイト 多くは2バイト 表現できない場合がある UNIX系レガシー、古い日本語データ

5. バイト数チェックでよくあるミス

文字数だけ見てフォーム上限を判断する

「100文字以内」と書かれているフォームでも、実際にはデータベース側で「300バイト以内」のような制限がある場合があります。この場合、全角文字や絵文字を多く含む文章は、文字数では余裕があってもバイト数で超過することがあります。

半角カタカナを必ず1バイトだと思い込む

Shift_JISでは半角カタカナを1バイトとして扱えるケースがありますが、EUC-JPでは実エンコード時に2バイトになることがあります。レガシーシステムに半角カナを渡す場合は、対象の文字コードで実際に何バイトになるかを確認してください。

絵文字を1文字として数える

SNSやチャットでは絵文字は見た目上1文字に見えますが、UTF-16では4バイトになることが多く、UTF-8でも4バイトになることがあります。絵文字や異体字が多い文章では、文字数とバイト数の差が大きくなります。

6. mojisucount.comで確認するときの見方

mojisucount.comでは、入力した文章について、文字数だけでなくUTF-8、UTF-16、Shift_JIS、EUC-JPのバイト数も確認できます。まずは通常の文字数を見て、次に提出先やシステムの仕様に合わせて必要な文字コードのバイト数を確認してください。

  1. WebフォームやAPIなら、まずUTF-8バイト数を見る。
  2. JavaScriptや絵文字を含む文字列長のズレを見るなら、UTF-16バイト数を見る。
  3. 日本の古いWindows系システムなら、Shift_JISバイト数を見る。
  4. 古いUNIX系データやEUC-JP指定のCSVなら、EUC-JPバイト数を見る。

ただし、レガシー文字コードは実装や変換ライブラリによって扱いが変わることがあります。業務システムに投入する最終データは、相手システムと同じ文字コード・同じ変換方式で確認するのが安全です。

7. 参考情報

8. まとめ

  • UTF-16では一般的な文字は2バイト、絵文字や一部の異体字は4バイトになる。
  • EUC-JPでは半角英数字は1バイト、日本語の多くは2バイトだが、半角カナや未対応文字に注意が必要。
  • 「日本語は何バイトか」は文字コードによって答えが変わる。必ず対象システムのエンコーディングに合わせて確認する。