UTF-8マルチバイトhexエンコーディング
UTF-8がマルチバイト文字をhexシーケンスとしてエンコードする仕組みを理解します。2バイト、3バイト、4バイトエンコーディングのバイトパターンと例を学びましょう。
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 |
00 – 7F |
| U+0080 – U+07FF | 2 | 110xxxxx 10xxxxxx |
C2 80 – DF BF |
| U+0800 – U+FFFF | 3 | 1110xxxx 10xxxxxx 10xxxxxx |
E0 A0 80 – EF BF BF |
| U+10000 – U+10FFFF | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
F0 90 80 80 – F4 8F BF BF |
エンコード例 — "世"(U+4E16):
コードポイントU+4E16は3バイト範囲(U+0800 – U+FFFF)に該当します。
- 4E16を2進数に変換:
0100 1110 0001 0110 - 3バイトテンプレート
1110xxxx 10xxxxxx 10xxxxxxに分割:- 上位4ビット:
0100→ 第1バイト:1110 0100=E4 - 次の6ビット:
111000→ 第2バイト:10 111000=B8 - 最後の6ビット:
010110→ 第3バイト:10 010110=96
- 上位4ビット:
- 結果:
E4 B8 96
hexダンプでUTF-8を認識する:
hexエディタでバイナリデータを表示する際、先頭バイトのパターンでUTF-8マルチバイトシーケンスを識別できます:
C2–DFで始まるバイトは2バイトシーケンスの開始(ラテン拡張、ギリシャ語、キリル文字など)E0–EFで始まるバイトは3バイトシーケンスの開始(CJK文字、ほとんどの記号)F0–F4で始まるバイトは4バイトシーケンスの開始(絵文字、希少なスクリプト、補助CJK)80–BFで始まるバイトは継続バイトであり、文字の先頭に現れるべきではない
一般的なデバッグシナリオ:
文字化け(garbled text)は、UTF-8バイトが異なるエンコーディング(例: Latin-1やWindows-1252)として解釈された場合に発生します。hexエディタでは、基になるバイトは正しく見えます — 問題は解釈レイヤーにあります。C3 A9のようなシーケンスが"é"ではなく"é"として表示される場合、ファイルはUTF-8ですがLatin-1として読み取られています。
ユースケース
UTF-8 hexエンコーディングの理解は、Webアプリケーションでの文字エンコーディング問題のデバッグ、バイナリプロトコルでの国際化テキストの解析、非ASCII文字を含むファイルコンテンツの分析に不可欠です。