文字化けを攻略する

備忘録

おつかれさまです。すぺきよです。

いつも悩まされる文字化け。忘れたころに発生する文字化け。困りますよね。

特にWindows環境を使っていると、よくShift JISとUTF-8がごちゃ混ぜになり、文字化けが発生します。

Windowsでは昔から日本語はShift JISが基本なので、UTF-8のデータを表示すると文字化けが発生しやすいです。

実は文字化けにも癖があり、どう化けるか見ると元の文字のエンコードがある程度、判断ついたりします。

ただ、どっちがどっちかすぐ忘れてしまうので、備忘録としてまとめておきます。

今回はよく発生するShift JISとUTF-8を相互に表示したときの化け方をメモします。

今回の記事を読んで「文字化けなんて大したことない」と思って頂けたら幸いです。

Shift JISをUTF-8で表示したとき

Shift JISで保存された文字をUTF-8として画面に表示しようとすると、以下のように?がいっぱい表示されます。

UTF-8は知らない文字コードが出ると?を表示してごまかそうとするんですね。

?がいっぱい表示されたら、UTF-8以外をUTF-8で表示しようとしている可能性があります。

UTF-8をShift JISで表示したとき

UTF-8で保存された文字をShift JISとして画面に表示しようとすると、以下のようにわけのわからない漢字が出てくる文字列になります。

Shift JISは知らない文字コードが出ても、知っている範囲でなんとか表示しようとするんですね。

漢字がいっぱい表示されたらShift JISとして表示しようとしている可能性があります。

簡単な文字化けの試し方

基本がわかると、実際に意図して文字化けを起こすことができます。

ここでは、VSCodeを使って説明します。

VSCode新しいファイルを開き、右下のエンコードの選択が「UTF-8」になっていることを確認します。

なんでもいいので日本語を入力し、保存します。

ここでは「あいうえおかきくけこさしすせそ」としました。

その後、上で確認した右下のエンコードの「UTF-8」をクリックしてください。

すると、画面上部に「エンコード付きで再度開く」の選択肢が出てきますので、選択。

たくさんのエンコードが出てきますが、選択肢から選ぶのではなく、入力項目に直接Shift JISと入力して絞り込まれる候補から「Japanese(Shift JIS)」を選択ます。

すると、いとも簡単に文字化けを起こすことができました。

同じように、最初Shift JISで「あいうえおかきくけこさしすせそ」と入力して保存、UTF-8で表示してみると多くが?で表示されます。

UTF-8をShift JISで表示したときに化けた文字を復元してみる

どこかの環境で、UTF-8の文字列をShift JISとして表示されていた場合に文字化けしてしまっている文字列をVSCodeを使って復元できるでしょうか。

完全に戻せるわけではありませんが、ある程度戻すことができます。

試しに、「あいうえおかきくけこさしすせそ」で化けた文字列「縺ゅ>縺�縺医♀縺九″縺上¢縺薙&縺励☆縺帙◎」を戻してみましょう。

まず新しいファイルを開き、VSCodeの右下のエンコードを「Shift JIS」に変更します。

そこへ、文字化けしている文字列を貼り付けて一度保存します。

保存した後に、VSCodeの右下のエンコードを「UTF-8」に変更すると、一部化けてしまっていますがある程度もとの「あい�?えおかきくけこさしすせそ」に戻ります。

今回は「う」だけうまく戻りませんでしたね。

Shift JISも全てをよくわからない漢字で表現しようとするのではなく、一部?で表示してしまうみたいなので、このようなことが起きます。

また、Shift JISをUTF-8で表示してしまった時の????はもとの文字列に戻すことはできなません。

まとめ

今回はすぐに忘れる文字化けのパターンと、化けさせる方法と戻す方法の両方を紹介しました。

実際に自分で文字化けを起こしてみたり、元に戻してみたりすると文字化けなんて大したことではないことがわかります。

見るとパニックを起こしやすい文字化けですが、慌てずに化け方をもとに、表示しようとしている環境のエンコード設定を見直しましょう。

データ側のエンコードを変更してはいけませんよ。あくまで表示側を変更しましょう。

データ側のエンコードを変更したり、文字化けしている状態で保存したりすると、データが壊れちゃう可能性があります。

そのデータを使っているシステムがある場合は、システムが動かなくなる可能性が高いです。

文字化けを見た場合は、まずは落ち着いて、データは正しいことを前提とし、表示方法や表示設定を見直しましょう。

コメント

タイトルとURLをコピーしました