文字数とバイト数の違い|UTF-8・Shift_JIS のカウント方法

プログラミングやデータベース設計において、「文字数」と「バイト数」の違いを正確に理解することは不可欠です。日本語のように 1 文字が複数バイトで表現される言語では、この違いを見落とすとデータの切り詰めや文字化けといった深刻な問題を引き起こします。この記事では、主要なエンコーディングにおける文字数とバイト数の関係を詳しく解説します。文字数の確認には 文字カウンタス をご利用ください。

文字数とバイト数の基本的な違い

文字数はテキストに含まれる文字の個数を指し、バイト数はそのテキストをコンピュータが保存する際に必要なデータ量を指します。英語のアルファベットは 1 文字 = 1 バイトですが、日本語ではエンコーディングによって 1 文字あたりのバイト数が異なります。

エンコーディング 半角英数字 ひらがな・カタカナ 漢字 絵文字
UTF-8 1 バイト 3 バイト 3 バイト 4 バイト
Shift_JIS 1 バイト 2 バイト 2 バイト 非対応
EUC-JP 1 バイト 2 バイト 2 バイト 非対応
UTF-16 2 バイト 2 バイト 2 バイト 4 バイト

たとえば「こんにちは」という 5 文字のテキストは、UTF-8 では 15 バイト、Shift_JIS では 10 バイトになります。同じ文字数でもエンコーディングによってバイト数が大きく異なる点に注意が必要です。

UTF-8 の仕組みと特徴

UTF-8 は現在の Web 標準エンコーディングであり、世界中の文字を扱えるユニバーサルな文字コードです。可変長エンコーディングを採用しており、文字によって 1〜4 バイトを使い分けます。

UTF-8 の利点は ASCII との後方互換性にあります。英語のテキストはそのまま 1 バイトで表現されるため、既存の英語圏のシステムとの互換性が保たれます。

Shift_JIS と EUC-JP の特徴

Shift_JIS と EUC-JP は、日本語専用のエンコーディングとして長年使われてきました。現在は UTF-8 への移行が進んでいますが、レガシーシステムやメール送信では依然として使用されるケースがあります。

特徴 Shift_JIS EUC-JP
主な用途 Windows 環境、レガシーシステム UNIX/Linux 環境
日本語 1 文字のバイト数 2 バイト 2 バイト
絵文字対応 非対応 非対応
多言語対応 日本語のみ 日本語のみ
現在の推奨度 非推奨 (レガシー用途のみ) 非推奨 (レガシー用途のみ)

実務で注意すべきポイント

文字数とバイト数の違いは、以下のような実務場面で問題を引き起こすことがあります。

テキスト例 文字数 UTF-8 バイト数 Shift_JIS バイト数
Hello 5 5 5
こんにちは 5 15 10
Hello こんにちは 11 21 16
🎉🎊🎈 3 12 非対応

プログラミング言語ごとの文字数カウント

プログラミング言語によって、文字列の「長さ」が何を返すかは異なります。開発時にはこの違いを正確に把握しておく必要があります。

文字数とバイト数の違いを正しく理解することは、データの整合性を保ち、予期しないバグを防ぐための基本です。テキストの文字数やバイト数を手軽に確認したい場合は、文字カウンタス をぜひご活用ください。