HEXを文字列に変換できない原因と対処法

HEXを文字列に変換しようとしても、何も表示されない、文字化けする、途中でエラーになることがあります。多くの場合は、桁数の不足、文字コードの違い、0x\xなどの表記混在が原因です。まずは入力形式から順番に確認していきます。

この記事の要点

HEXを貼り付けて文字列へ戻す

文字コードを選び、HEXから文字列への復号結果をブラウザ内で確認できます。

文字列16進数変換ツールを使う

HEXから文字列へ戻せない主な症状

変換がうまくいかないときは、原因が「HEXの書き方」にある場合と、「文字コードの選択」にある場合があります。まずは症状を分けて考えます。

まず最初に確認すること

最初に見るべきなのは、文字コードよりも入力形式です。HEXとして読めない文字が混ざっていたり、1バイト分の2桁が欠けていたりすると、文字コードを変えても正しく変換できません。

たとえば E3 81 82 はUTF-8で「あ」を表しますが、最後の1桁が欠けた E3 81 8 のような入力では、バイト列として不完全です。

最初に見るチェックリスト

確認項目見方
桁数通常は偶数桁になっているかE38182はOK、E3818は不足の可能性
文字0〜9、A〜F以外が混ざっていないかG1はHEXではない
区切り空白やカンマが表示用かE3 81 82E3,81,82
文字コードUTF-8、Shift_JISなどが仕様と合っているかE3 81 82はUTF-8で「あ」
余分なバイトBOMや改行コードが含まれていないかEF BB BF0D 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の「あ」です。

HEXUTF-8で読むShift_JISで読む
E3 81 82文字化けする可能性
82 A0正しく読めない
切り分けの考え方

WebやJSON由来ならUTF-8を優先します。古いCSV、メール、業務システム由来ならShift_JISの可能性も確認します。仕様書がある場合は、その文字コード指定を最優先します。

HEX表記が混ざっている場合

ログやプログラムの出力では、同じバイト列でも複数の書き方があります。変換前にツールや仕様が受け付ける形へ整えます。

表記意味整形例
E3 81 82空白区切りE38182
0xE3 0x81 0x820x付き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が使われることが多いため、ログやファイルを比較するときは改行コードも確認します。

ツールで確認する方法

  1. 文字列16進数変換ツールを開きます。
  2. HEX欄に対象のHEXを貼り付けます。
  3. 文字コードをUTF-8にして結果を確認します。
  4. 読めない場合はShift_JISなど、データ仕様に近い文字コードへ切り替えます。
  5. 必要に応じて空白、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としては正しい日本語になりません。