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が支配する理由:

  1. ASCII互換性:HTMLタグ、JSON構文、URLのオーバーヘッドなし
  2. バイトオーダーなし:UTF-16はBOMが必要、UTF-8は不要
  3. 自己同期:任意のバイト位置から文字境界を見つけられる
  4. 普遍的な標準:HTML5、JSON、HTTPすべてがUTF-8を指定

ユースケース

多言語アプリケーションのストレージ、ネットワークペイロードサイズの最適化、またはデータベースエンコーディングの選択において、UTF-8 vs UTF-16のトレードオフを理解することで、データ転送とストレージコストを大幅に削減する情報に基づいた決定ができます。

試してみる — String Length Calculator

フルツールを開く