UTF-8 vs UTF-16:エンコーディングサイズの比較
ASCII、ラテン文字、CJK、絵文字テキストのUTF-8とUTF-16バイトサイズを比較します。さまざまなタイプのコンテンツに対してどちらのエンコーディングが効率的かを学びます。
Encoding Comparison
詳細な説明
UTF-8 vs UTF-16:どちらが小さいか?
答えはコンテンツに完全に依存します。UTF-8とUTF-16は異なるUnicode範囲に対して異なるバイト幅を使用するため、最も効率的なエンコーディングはテキストの言語と構成によって異なります。
文字範囲ごとのバイト幅
| Unicode範囲 | 文字 | UTF-8 | UTF-16 |
|---|---|---|---|
| U+0000–U+007F | ASCII | 1バイト | 2バイト |
| U+0080–U+07FF | ラテン拡張、ギリシャ語など | 2バイト | 2バイト |
| U+0800–U+FFFF | CJK、デーヴァナーガリーなど | 3バイト | 2バイト |
| U+10000–U+10FFFF | 絵文字、珍しいCJKなど | 4バイト | 4バイト |
UTF-8が勝つ場合
UTF-8はテキストが主にASCIIまたはラテン拡張の場合によりコンパクトです:
"Hello World" (11文字)
UTF-8: 11バイト
UTF-16: 22バイト (2倍!)
UTF-16が勝つ場合
UTF-16はテキストが主にCJKの場合によりコンパクトです:
"東京都渋谷区" (5文字)
UTF-8: 15バイト
UTF-16: 10バイト (33%小さい!)
実際の例
| コンテンツタイプ | 典型的なUTF-8 / UTF-16比率 |
|---|---|
| 英語の文章 | 0.5× (UTF-8が半分のサイズ) |
| JSON APIレスポンス | 0.6× (主にASCIIのキーと値) |
| 日本語のブログ記事 | 1.2× (UTF-8がやや大きい) |
| 中国語のドキュメント | 1.4× (UTF-8が40%大きい) |
| 絵文字多めのチャット | 1.0× (ほぼ同等) |
UTF-8がWebを支配する理由
一部のコンテンツでUTF-16が小さいにもかかわらず、UTF-8が支配する理由:
- ASCII互換性:HTMLタグ、JSON構文、URLのオーバーヘッドなし
- バイトオーダーなし:UTF-16はBOMが必要、UTF-8は不要
- 自己同期:任意のバイト位置から文字境界を見つけられる
- 普遍的な標準:HTML5、JSON、HTTPすべてがUTF-8を指定
ユースケース
多言語アプリケーションのストレージ、ネットワークペイロードサイズの最適化、またはデータベースエンコーディングの選択において、UTF-8 vs UTF-16のトレードオフを理解することで、データ転送とストレージコストを大幅に削減する情報に基づいた決定ができます。