UTF-8の文字列をHEXへ変換する方法
UTF-8では、文字ごとのUnicodeコードポイントを規則に従って1〜4バイトへ符号化します。得られた各バイトを2桁の16進数にすればHEX表記になります。
この記事の要点
- 先に文字列をUTF-8のバイト列へ符号化します。
- 各バイトを00〜FFの2桁のHEXで表します。
- 復号時もUTF-8を指定し、バイトの順序を変えません。
UTF-8からHEXへ変換する基本手順
- 変換する文字列を決めます。
- 文字列をUTF-8で符号化し、バイト列を得ます。
- 各バイトを2桁の16進数へ変換します。
- 必要に応じて空白、カンマ、
0xなどの区切りを付けます。
HEXは表示形式なので、空白区切りの41 42 43と連結した414243は同じ3バイトを表せます。
例1:「ABC」をUTF-8のHEXへ変換
「A」「B」「C」はASCIIと共通の範囲にあり、UTF-8ではそれぞれ1バイトです。
| 文字 | 10進数 | 2進数 | HEX |
|---|---|---|---|
| A | 65 | 01000001 | 41 |
| B | 66 | 01000010 | 42 |
| C | 67 | 01000011 | 43 |
変換結果
空白区切り:41 42 43
連結:414243
0x形式:0x41 0x42 0x43
例2:「あ」をUTF-8のHEXへ変換
「あ」のUnicodeコードポイントはU+3042です。UTF-8の3バイト形式へ符号化すると、バイト列は11100011 10000001 10000010になります。
「あ」の変換結果
2進数:11100011 10000001 10000010
HEX:E3 81 82
Unicodeコードポイントの3042とUTF-8のHEXであるE3 81 82は別物です。前者は文字番号、後者はUTF-8で符号化した3バイトを表します。
HEXからUTF-8の文字列へ戻す
- HEXを2桁ずつ区切り、バイト列として読み取ります。
- 空白、カンマ、
0xなど表示用の記号を取り除きます。 - 得られたバイト列をUTF-8として復号します。
たとえばE3 81 82をUTF-8として復号すると「あ」になります。Shift_JISなど別の文字コードで復号すると、正しい文字にならない可能性があります。
ツールで変換する方法
- 文字列16進数変換ツールを開きます。
- 文字コードで「UTF-8」を選びます。
- 文字列欄に変換したいテキストを入力します。
- HEX欄に表示された結果をコピーします。
逆変換ではHEX欄へデータを貼り付けます。スペース、カンマ、0x、\x付きの形式も用途に合わせて調整できます。
変換時の注意点
- 文字コードを固定する:送信側と受信側でUTF-8を指定します。
- バイト順を変えない:UTF-8の複数バイト文字は並び順が決まっています。
- 奇数桁を避ける:1バイトはHEX 2桁なので、通常のバイト列は偶数桁になります。
- BOMを区別する:
EF BB BFはUTF-8 BOMです。本文の文字とは別に扱います。 - 改行を確認する:LFは
0A、CRLFは0D 0Aです。
よくある質問
HEXの大文字と小文字に違いはありますか?
数値としての違いはありません。E3とe3は同じ値です。表記は用途や仕様に合わせます。
HEXの空白は必要ですか?
バイトの区切りとして空白を入れると読みやすくなりますが、値そのものには含まれません。受け付ける形式はツールや仕様によって異なります。
UTF-8のBOMは常に必要ですか?
通常は不要です。UTF-8のBOMはEF BB BFですが、プロトコルやアプリケーションの仕様で必要な場合だけ付けます。