バイト数

テキストデータをエンコーディングした際のバイト単位のサイズ。文字コードによって同じ文字でもバイト数が異なる。

バイト数とは、テキストデータをコンピュータ上で表現する際に必要なバイト (8 ビット) の総数です。文字数とバイト数は根本的に異なる概念であり、同じテキストでもエンコーディング方式によってバイト数は大きく変わります。たとえば「文字」という 2 文字のテキストは、UTF-8 では 6 バイト、Shift_JIS では 4 バイト、UTF-16 では 4 バイト (BOM を除く) になります。この違いを理解することは、ソフトウェア開発やデータ管理の基礎として不可欠です。

UTF-8 における各文字のバイト数は、文字の種類によって 1 バイトから 4 バイトまで変動します。ASCII 文字 (半角英数字・記号) は 1 バイト、ラテン文字の拡張 (アクセント付き文字など) は 2 バイト、日本語のひらがな・カタカナ・漢字や中国語の漢字は 3 バイト、絵文字やサロゲートペア文字は 4 バイトです。一方、Shift_JIS では日本語は 2 バイト、GBK では中国語は 2 バイトで表現されます。UTF-16 ではほとんどの文字が 2 バイトですが、サロゲートペアを使う文字は 4 バイトになります。文字コードの入門書でエンコーディングごとのバイト数の違いを詳しく学べます。

実務でバイト数が問題になる場面は多岐にわたります。データベースの VARCHAR 型では、MySQL の utf8mb4 設定で最大 4 バイト/文字を想定する必要があり、VARCHAR(255) は最大 255 文字ではなく最大 255 バイトを意味する場合があります (DBMS やバージョンによって文字数指定かバイト数指定かが異なります)。API のリクエスト/レスポンスサイズ制限もバイト単位で設定されることが一般的で、AWS API Gateway のデフォルトペイロード上限は 10 MB です。メールの添付ファイルサイズ制限、SMS の文字数制限 (実際にはバイト数ベース)、URL の長さ制限 (ブラウザによって 2,048-8,192 バイト) なども、すべてバイト数に基づいています。

よくある誤解として、「文字数を数えればバイト数も分かる」という思い込みがあります。日本語と英語が混在するテキストでは、文字数からバイト数を正確に算出することは困難です。たとえば「Hello 世界」は 8 文字ですが、UTF-8 では 5 + 6 = 11 バイトになります。プログラミング言語によっても文字列の内部表現が異なり、JavaScript の string.length は UTF-16 コードユニット数を返すため、サロゲートペアを含む文字では文字数と一致しません。正確なバイト数を取得するには、JavaScript では new TextEncoder().encode(str).length、Python では len(str.encode('utf-8')) を使います。データベース設計の書籍でもバイト数の考慮は重要なトピックです。

文字数カウントツールにおいて、バイト数の表示は文字数と並んで重要な指標です。ユーザーがテキストを入力した際に、文字数だけでなくバイト数もリアルタイムで表示することで、データベースへの格納可否や API の制限内に収まるかどうかを即座に判断できます。特に多言語テキストを扱う場面では、文字数とバイト数の乖離が大きくなるため、両方の値を把握することがデータの切り詰めや文字化けの防止に直結します。