HEXを文字列に変換できない原因と対処法
HEXを文字列に変換しようとしても、何も表示されない、文字化けする、途中でエラーになることがあります。多くの場合は、桁数の不足、文字コードの違い、0xや\xなどの表記混在が原因です。まずは入力形式から順番に確認していきます。
この記事の要点
- HEXは2桁で1バイトを表すため、奇数桁の入力はまず確認します。
- HEXが正しくても、
UTF-8とShift_JISを間違えると文字化けします。 - ログやプログラムからコピーしたHEXには、
0x、\x、カンマ、改行が混ざることがあります。
HEXから文字列へ戻せない主な症状
変換がうまくいかないときは、原因が「HEXの書き方」にある場合と、「文字コードの選択」にある場合があります。まずは症状を分けて考えます。
- エラーになり、文字列欄へ何も出ない
- 一部だけ読めるが、日本語が文字化けする
- 見えない文字や余計な記号が先頭に出る
- 改行の位置が想定と違う
- コピー元のHEXに
0x、カンマ、\xが混ざっている
まず最初に確認すること
最初に見るべきなのは、文字コードよりも入力形式です。HEXとして読めない文字が混ざっていたり、1バイト分の2桁が欠けていたりすると、文字コードを変えても正しく変換できません。
たとえば E3 81 82 はUTF-8で「あ」を表しますが、最後の1桁が欠けた E3 81 8 のような入力では、バイト列として不完全です。
最初に見るチェックリスト
| 確認項目 | 見方 | 例 |
|---|---|---|
| 桁数 | 通常は偶数桁になっているか | E38182はOK、E3818は不足の可能性 |
| 文字 | 0〜9、A〜F以外が混ざっていないか | G1はHEXではない |
| 区切り | 空白やカンマが表示用か | E3 81 82、E3,81,82 |
| 文字コード | UTF-8、Shift_JISなどが仕様と合っているか | E3 81 82はUTF-8で「あ」 |
| 余分なバイト | BOMや改行コードが含まれていないか | EF BB BF、0D 0A |
よくある入力例と直し方
| 入力例 | 起きること | 確認する点 |
|---|---|---|
E3818 | バイト列として不完全 | 2桁ずつに分けたとき、最後が欠けていないか確認 |
0xE3 0x81 0x82 | ツールによってはエラー | 0xを取り除いてE38182に整形 |
\xE3\x81\x82 | エスケープ表記として扱う必要がある | \xを取り除いてHEX部分だけにする |
EF BB BF E3 81 82 | 先頭に見えない文字が出ることがある | EF BB BFがUTF-8 BOMか確認 |
文字コードが違う場合
HEXは同じでも、復号に使う文字コードが違うと結果が変わります。たとえばE3 81 82はUTF-8として読めば「あ」ですが、別の文字コードとして読むと正しく表示できないことがあります。
たとえば 82 A0 はShift_JISでは「あ」として読めますが、UTF-8として読むと正しい日本語になりません。逆に E3 81 82 はUTF-8の「あ」です。
| HEX | UTF-8で読む | Shift_JISで読む |
|---|---|---|
E3 81 82 | あ | 文字化けする可能性 |
82 A0 | 正しく読めない | あ |
WebやJSON由来ならUTF-8を優先します。古いCSV、メール、業務システム由来ならShift_JISの可能性も確認します。仕様書がある場合は、その文字コード指定を最優先します。
HEX表記が混ざっている場合
ログやプログラムの出力では、同じバイト列でも複数の書き方があります。変換前にツールや仕様が受け付ける形へ整えます。
| 表記 | 意味 | 整形例 |
|---|---|---|
E3 81 82 | 空白区切り | E38182 |
0xE3 0x81 0x82 | 0x付き | E38182 |
\xE3\x81\x82 | エスケープ表記 | E38182 |
E3,81,82 | カンマ区切り | E38182 |
BOMと改行コードを確認する
先頭にEF BB BFがある場合、それはUTF-8 BOMです。本文の文字ではなく、ファイル先頭に付く識別用のバイトとして扱われることがあります。
改行もバイトとして含まれます。LFは0A、CRLFは0D 0Aです。想定より改行が多い場合は、入力元の改行コードを確認します。
CSVやテキストファイルを扱う場合、先頭のBOMや改行コードが原因で、見た目には同じ文字列でも変換結果が違って見えることがあります。特にWindows環境ではCRLF、Unix系ではLFが使われることが多いため、ログやファイルを比較するときは改行コードも確認します。
ツールで確認する方法
- 文字列16進数変換ツールを開きます。
- HEX欄に対象のHEXを貼り付けます。
- 文字コードをUTF-8にして結果を確認します。
- 読めない場合はShift_JISなど、データ仕様に近い文字コードへ切り替えます。
- 必要に応じて空白、
0x、\xなどの表記を整えます。
よくある質問
HEXが奇数桁でも文字列に戻せますか?
通常のバイト列は1バイトを2桁のHEXで表すため、奇数桁は入力漏れや区切りの誤りを疑います。
HEXは正しいのに文字化けするのはなぜですか?
バイト列は正しくても、復号時に選んだ文字コードが違うと別の文字として解釈されます。UTF-8、Shift_JISなどを仕様に合わせて確認します。
0xや空白は削除する必要がありますか?
0x、空白、カンマ、改行は表示用の区切りとして使われることがあります。ツールや仕様が受け付ける形式に合わせて整形します。
\xE3\x81\x82 のような表記はそのまま変換できますか?
これはプログラムやログで使われるエスケープ表記です。ツールによってはそのまま受け付けないため、\xを取り除いてE38182のようにHEX部分だけに整形します。
EF BB BF は文字ですか?
EF BB BFはUTF-8 BOMとして使われることがあります。本文の文字ではなく、ファイルの先頭に付く識別用のバイトとして扱われる場合があります。
Shift_JISのHEXをUTF-8として読むとどうなりますか?
正しく読めず、文字化けしたりエラーになったりすることがあります。たとえばShift_JISの82 A0は「あ」を表しますが、UTF-8としては正しい日本語になりません。