16進数でのUnicodeコードポイント(U+xxxx)
Unicodeコードポイントが16進数表記(U+xxxx)でどのように表現されるか、hexエディタでUTF-8、UTF-16、UTF-32バイトシーケンスにどのようにマッピングされるかを学びます。
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を確認し、バイトシーケンスを調べます。単純なラテン文字の前にC3やC2バイトが見える場合、ファイルはおそらくUTF-8ですが誤って解釈されています。ASCII文字の間に00バイトが見える場合、ファイルはおそらくUTF-16です。
ユースケース
Unicode hexエンコーディングの理解は、プラットフォーム間での文字レンダリング問題のデバッグ、国際化アプリケーションでのテキスト処理の実装、エンコードされたテキストを含むバイナリプロトコルペイロードの分析に不可欠です。