UTF-8とShift_JISのHEXが違う理由

同じ「あ」や「日本」という文字でも、UTF-8で変換した場合とShift_JISで変換した場合では、表示されるHEXが変わります。これは変換ミスではなく、文字コードごとに文字をバイトへ置き換えるルールが違うためです。

この記事の要点

同じ文字を複数の文字コードで比較

UTF-8やShift_JISを切り替えて、文字列からHEXへの変換結果を確認できます。

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

UTF-8とShift_JISでHEXが変わる理由

文字列を保存・送信するとき、コンピューターは文字コードに従って文字をバイト列へ変換します。UTF-8とShift_JISはどちらも日本語を扱えますが、文字とバイト列の対応表が同じではありません。

文字列 → 文字コードを選ぶ → バイト列が決まる → HEXで表示する

つまり、HEXが違うのは変換ミスとは限りません。どの文字コードで符号化した結果なのかをセットで見ることが大切です。

日本語文字列の変換例

たとえば「あ」はUTF-8では3バイト、Shift_JISでは2バイトになります。同じ画面上の文字でも、実際のバイト列は次のように異なります。

文字列UTF-8のHEXShift_JISのHEXポイント
E3 81 8282 A0UTF-8は3バイト、Shift_JISは2バイト
日本E6 97 A5 E6 9C AC93 FA 96 7B2文字分のバイト列が続く
ABC41 42 4341 42 43ASCII範囲では同じ結果になりやすい
EF BD B1B1半角カナは文字コード差が出やすい
😊F0 9F 98 8A変換不可の場合ありShift_JISでは表せない文字の例

英数字だけを見ると差が出ないことがあります。そのため、日本語を含むデータで文字化けが起きたときは、文字コードの指定を特に確認します。

ツールで比較する方法

  1. 文字列16進数変換ツールを開きます。
  2. 文字列欄に比較したい文字を入力します。
  3. 文字コードをUTF-8にしてHEXを確認します。
  4. 文字コードをShift_JISに切り替え、結果の差を確認します。

CSV、メール本文、古い業務システム向けデータなどはShift_JISが指定される場合があります。WebページやAPI連携ではUTF-8指定が多いため、データの受け渡し先に合わせて確認しましょう。

CSVで文字化けするときの考え方

たとえばUTF-8で作成したCSVを、古いExcelやShift_JIS前提のシステムで開くと、日本語が文字化けすることがあります。これは、保存したときの文字コードと、読み込む側が想定している文字コードが違うためです。

HEXで確認すると、同じ「日本」でもUTF-8では E6 97 A5 E6 9C AC、Shift_JISでは 93 FA 96 7B になります。読み込み側がどちらを期待しているかを合わせることが重要です。

どちらの文字コードを選ぶべきか

日本のCSVではWindows-31Jにも注意

日本の業務システムやExcel向けCSVでは、「Shift_JIS」と書かれていても、実際にはWindows-31J(CP932)を指していることがあります。Windows-31JはShift_JISをもとにした文字コードで、丸数字や一部の記号、機種依存文字の扱いが関係します。

そのため、仕様書に「Shift_JIS」とだけ書かれている場合でも、実際の受け取り側がWindows環境なのか、厳密なShift_JISなのかを確認すると安全です。

Shift_JISで表せない文字がある

UTF-8は現在のWebで広く使われ、多くの文字や絵文字を扱えます。一方、Shift_JISでは表せない文字があります。たとえば絵文字や一部の記号、旧字体の一部は、変換時に ? になったり、エラーになったりすることがあります。

CSVや古いシステムへ送るデータでは、文字コードだけでなく、使える文字の範囲も確認しておく必要があります。

比較時の注意点

よくある質問

同じ文字なのにUTF-8とShift_JISでHEXが違うのはなぜですか?

文字コードごとに、文字をどのバイト列へ割り当てるかの規則が違うためです。HEXはそのバイト列を16進数で表示したものなので、文字コードが変わると結果も変わります。

WebではUTF-8とShift_JISのどちらを使うべきですか?

現在のWebページやAPIではUTF-8が一般的です。ただし、古い業務システムや一部のCSV連携ではShift_JISが指定されることがあります。

HEXだけを見れば文字コードを必ず判定できますか?

必ず判定できるとは限りません。同じバイト列が複数の文字コードで別の文字として解釈できる場合があるため、仕様や周辺情報も合わせて確認します。

Shift_JISとWindows-31Jは同じですか?

厳密には同じではありません。ただし日本の実務では、Shift_JISと書かれていてもWindows-31J(CP932)を指していることがあります。CSVや業務システム連携では仕様を確認するのが安全です。

Shift_JISで絵文字は変換できますか?

多くの絵文字はShift_JISでは表せません。変換時に ? になったり、エラーになったりすることがあります。絵文字や多言語の文字を扱う場合はUTF-8が向いています。

Excel向けCSVはUTF-8とShift_JISのどちらがよいですか?

新しい環境ではUTF-8のCSVも扱えますが、古いExcelや業務システムではShift_JISやWindows-31Jが指定されることがあります。提出先や取り込み先の仕様に合わせて選びます。