UTF-8マルチバイトhexエンコーディング

UTF-8がマルチバイト文字をhexシーケンスとしてエンコードする仕組みを理解します。2バイト、3バイト、4バイトエンコーディングのバイトパターンと例を学びましょう。

Encoding

Hex

E4 B8 96 E7 95 8C

ASCII

世界

詳細な説明

UTF-8は、Unicodeコードポイントを1〜4バイトで表現する可変長文字エンコーディングです。標準ASCII文字(U+0000からU+007F)は1バイトのみで済みますが、他のスクリプトの文字(中国語、日本語、アラビア語、絵文字)は複数バイトが必要です。これらのマルチバイトシーケンスのhex表現を理解することは、エンコーディング問題のデバッグ、バイナリデータの解析、国際化テキストの処理に不可欠です。

UTF-8バイトパターン:

コードポイント範囲 バイト数 バイナリパターン Hex範囲
U+0000 – U+007F 1 0xxxxxxx 007F
U+0080 – U+07FF 2 110xxxxx 10xxxxxx C2 80DF BF
U+0800 – U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx E0 A0 80EF BF BF
U+10000 – U+10FFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx F0 90 80 80F4 8F BF BF

エンコード例 — "世"(U+4E16):

コードポイントU+4E16は3バイト範囲(U+0800 – U+FFFF)に該当します。

  1. 4E16を2進数に変換: 0100 1110 0001 0110
  2. 3バイトテンプレート 1110xxxx 10xxxxxx 10xxxxxx に分割:
    • 上位4ビット: 0100 → 第1バイト: 1110 0100 = E4
    • 次の6ビット: 111000 → 第2バイト: 10 111000 = B8
    • 最後の6ビット: 010110 → 第3バイト: 10 010110 = 96
  3. 結果: E4 B8 96

hexダンプでUTF-8を認識する:

hexエディタでバイナリデータを表示する際、先頭バイトのパターンでUTF-8マルチバイトシーケンスを識別できます:

  • C2DFで始まるバイトは2バイトシーケンスの開始(ラテン拡張、ギリシャ語、キリル文字など)
  • E0EFで始まるバイトは3バイトシーケンスの開始(CJK文字、ほとんどの記号)
  • F0F4で始まるバイトは4バイトシーケンスの開始(絵文字、希少なスクリプト、補助CJK)
  • 80BFで始まるバイトは継続バイトであり、文字の先頭に現れるべきではない

一般的なデバッグシナリオ:

文字化け(garbled text)は、UTF-8バイトが異なるエンコーディング(例: Latin-1やWindows-1252)として解釈された場合に発生します。hexエディタでは、基になるバイトは正しく見えます — 問題は解釈レイヤーにあります。C3 A9のようなシーケンスが"é"ではなく"é"として表示される場合、ファイルはUTF-8ですがLatin-1として読み取られています。

ユースケース

UTF-8 hexエンコーディングの理解は、Webアプリケーションでの文字エンコーディング問題のデバッグ、バイナリプロトコルでの国際化テキストの解析、非ASCII文字を含むファイルコンテンツの分析に不可欠です。

試してみる — Hex Editor

フルツールを開く