16進数でのUnicodeコードポイント(U+xxxx)

Unicodeコードポイントが16進数表記(U+xxxx)でどのように表現されるか、hexエディタでUTF-8、UTF-16、UTF-32バイトシーケンスにどのようにマッピングされるかを学びます。

Encoding

Hex

U+0041 = 41, U+00E9 = C3 A9, U+1F600 = F0 9F 98 80

ASCII

A, e with accent (é), grinning face emoji

詳細な説明

Unicodeはすべての文字にコードポイントと呼ばれる固有の番号を割り当てます。U+XXXXの表記で書かれ、XXXXは16進数値です。Unicodeコードポイントとそのエンコードされたバイトシーケンスの関係を理解することは、hexエディタでのテキストデータの処理に不可欠です。

Unicodeコードポイント範囲:

範囲 名前
U+0000 – U+007F 基本ラテン(ASCII) U+0041 = A
U+0080 – U+00FF ラテン1補助 U+00E9 = é
U+0100 – U+024F ラテン拡張 U+0148 = ň
U+0370 – U+03FF ギリシャ文字とコプト U+03B1 = α
U+4E00 – U+9FFF CJK統合漢字 U+4E16 = 世
U+1F600 – U+1F64F 顔文字 U+1F600 = 😀

コードポイントとエンコーディング:

コードポイントは抽象的な数値です。ファイルに格納される実際のバイトは使用するエンコーディングに依存します:

UTF-8エンコーディングのhex:

  • U+0041(A)→ 41(1バイト — ASCIIと同じ)
  • U+00E9(é)→ C3 A9(2バイト)
  • U+4E16(世)→ E4 B8 96(3バイト)
  • U+1F600(😀)→ F0 9F 98 80(4バイト)

UTF-16エンコーディングのhex:

  • U+0041(A)→ 00 41(2バイト、ビッグエンディアン)または 41 00(リトルエンディアン)
  • U+00E9(é)→ 00 E9 または E9 00
  • U+4E16(世)→ 4E 16 または 16 4E
  • U+1F600(😀)→ D8 3D DE 00(サロゲートペア、ビッグエンディアン、4バイト)

UTF-32エンコーディングのhex:

  • すべての文字が正確に4バイト
  • U+0041 → 00 00 00 41(ビッグエンディアン)
  • U+1F600 → 00 01 F6 00(ビッグエンディアン)

hexエディタでのUnicodeの読み取り:

hexエディタでテキストファイルを調べる際、表示されるバイトはエンコーディングに依存します。"é"だけを含むファイルは各エンコーディングで異なって見えます:

  • UTF-8: C3 A9(2バイト、BOMなし)
  • UTF-8 BOM付き: EF BB BF C3 A9(5バイト)
  • UTF-16BE: FE FF 00 E9(4バイト、BOM付き)
  • UTF-16LE: FF FE E9 00(4バイト、BOM付き)

プログラミングでのエスケープシーケンス:

言語によってUnicodeエスケープシーケンスの構文が異なります:

  • JavaScript: \u0041 または \u{1F600}
  • Python: \u0041 または \U0001F600
  • HTML: A または A(10進数)
  • CSS: \0041
  • JSON: \u0041(BMPのみ、それ以上はサロゲートペアが必要)

実用的なデバッグのヒント:

テキストファイルがあるエディタでは正しく見えるが別のエディタでは文字化けする場合、hexエディタで開きます。先頭のBOMを確認し、バイトシーケンスを調べます。単純なラテン文字の前にC3C2バイトが見える場合、ファイルはおそらくUTF-8ですが誤って解釈されています。ASCII文字の間に00バイトが見える場合、ファイルはおそらくUTF-16です。

ユースケース

Unicode hexエンコーディングの理解は、プラットフォーム間での文字レンダリング問題のデバッグ、国際化アプリケーションでのテキスト処理の実装、エンコードされたテキストを含むバイナリプロトコルペイロードの分析に不可欠です。

試してみる — Hex Editor

フルツールを開く