テキストのバイトサイズ計算 — UTF-8、UTF-16、ASCII
UTF-8、UTF-16、ASCIIエンコーディングで任意のテキストのバイトサイズを計算します。異なる文字エンコーディングがストレージサイズに影響する仕組みと、同じテキストがエンコーディング間で異なるバイトサイズを持つ理由を学びます。
Text Metrics
詳細な説明
テキストのバイトサイズ計算
テキストのバイトサイズは使用する文字エンコーディングに完全に依存します。同じ文字列でも、UTF-8、UTF-16、ASCIIのどれでエンコードされるかによって、劇的に異なるストレージ量を占有する場合があります。
JavaScriptでのバイトサイズ計算
TextEncoder APIは正確なUTF-8バイト数を提供します:
function getByteSize(text) {
const encoder = new TextEncoder(); // デフォルトはUTF-8
const encoded = encoder.encode(text);
return encoded.byteLength;
}
複数のエンコーディングの場合:
function getByteSizes(text) {
const utf8 = new TextEncoder().encode(text).byteLength;
const utf16 = text.length * 2; // 近似値
const ascii = text.replace(/[^\x00-\x7F]/g, "").length;
return { utf8, utf16, ascii };
}
エンコーディングの比較
| 文字 | UTF-8 | UTF-16 | ASCII |
|---|---|---|---|
A (U+0041) |
1バイト | 2バイト | 1バイト |
é (U+00E9) |
2バイト | 2バイト | N/A |
世 (U+4E16) |
3バイト | 2バイト | N/A |
| 絵文字 (U+1F600) | 4バイト | 4バイト | N/A |
UTF-8の可変幅エンコーディング
UTF-8は文字あたり1-4バイトを使用します:
- 1バイト: U+0000からU+007F(ASCII互換)— 英字、数字、基本的な句読点
- 2バイト: U+0080からU+07FF — アクセント付き文字、ギリシャ語、キリル文字、アラビア語、ヘブライ語
- 3バイト: U+0800からU+FFFF — CJK文字、ほとんどの記号
- 4バイト: U+10000からU+10FFFF — 絵文字、歴史的文字、楽譜
この可変幅により、英語主体のテキストではUTF-8は非常に効率的ですが、CJK主体のコンテンツではやや効率が低下します。
バイトサイズが重要な理由
- データベースストレージ — MySQLのVARCHAR(255)はUTF-8で255バイトを意味し、255文字より少ない場合がある
- APIペイロード — 多くのAPIはリクエスト/レスポンスのボディサイズを文字数ではなくバイト数で制限
- ファイルサイズの見積もり — テキストデータのストレージ要件の予測
- ネットワーク帯域幅 — バイトサイズが転送時間を決定
- Cookieの制限 — ブラウザのCookieは合計約4,096バイトに制限
BOM(バイトオーダーマーク)
UTF-8ファイルはBOM(\xEF\xBB\xBF、3バイト)で始まることがあります。UTF-16ファイルは \xFF\xFE または \xFE\xFF(2バイト)を使用します。これらの不可視マーカーはバイト数に加算されますが、可視文字ではありません。
ユースケース
データベースのストレージ要件を計算するバックエンド開発者は、適切なカラムタイプを選択するためにバイトサイズを使用します。APIフィールドのバイト対応制限を構築するフロントエンド開発者にも必要です。ログストレージコストを見積もるDevOpsエンジニアや、特定のエンコーディングでテキストデータを処理するETLパイプラインを設計するデータエンジニアも、正確なバイトサイズ計算に依存しています。