文字化けの直し方 — 文字コードを判定して、正しく読み直す
文字化けの多くは、データが壊れているのではなく、書いたときと違う文字コードで読んでいるだけです。正しい文字コードで読み直せば元に戻ります。Text Encoding Checker はファイルを UTF-8・Shift_JIS・EUC-JP のそれぞれで読み、どれで読むと正しい日本語になるかを並べて見せます。
どうやって文字コードを判定しているか
ファイルの中身には、どの文字コードで書いたかは記録されていません(BOM がある場合を除く)。そのため、実際にそれぞれの文字コードで読んでみて判断します。手がかりは2つあります。1つは「読めないバイト」の数で、その文字コードの決まりに合わないバイトの並びは読めずに � になります。UTF-8 は決まりが厳しく、Shift_JIS で書いたファイルを UTF-8 として読むとほぼ必ず読めないバイトが出るため、読めないバイトが0なら UTF-8 でほぼ間違いありません。もう1つは日本語らしさで、Shift_JIS と EUC-JP のどちらでもエラーなく読めてしまう場合に、ひらがな・カタカナが多く、珍しい漢字や半角カナが少ないほうを選びます。
化けた文字列のパターンで、何が起きたかが分かる
「縺薙s縺ォ縺。縺ッ」のように「縺」「繧」が並ぶのは、UTF-8 で書いた文字を Shift_JIS として読んだときの形です。「ã“ã‚“ã«ã¡ã¯」のように「ã」「â」が並ぶのは、UTF-8 を欧文の文字コード(Windows-1252)として読んだ形、「‚±‚ñ‚É‚¿‚Í」は Shift_JIS を Windows-1252 として読んだ形です。このツールの「化けた文字列を戻す」では、この3通りの読み違えを逆にたどって元の文字を求めます。Windows-1252 の読み違えは1バイトずつ別の文字になっているだけなので、ほぼ完全に戻せます。
戻せない文字がある理由
UTF-8 を Shift_JIS として読んだ場合は、Shift_JIS の決まりに合わないバイトが � に置き換えられて捨てられます。捨てられたバイトは文字列のどこにも残っていないので、その文字だけは戻せません。しかも捨てられたバイトは何を入れても UTF-8 として読めてしまうため、推測で埋めると「月」が「最」になるように別の文字にすり替わります。このツールは推測をせず、戻せない文字を 〓 で示します。元のファイルが残っているなら、文字列を直すより、ファイルを正しい文字コードで読み直すほうが確実です。化けた状態で保存し直すと、その時点で元のバイトは失われます。
UTF-8 に変換するときの BOM の選び方
BOM は UTF-8 であることを示す3バイト(EF BB BF)で、ファイルの先頭に付けます。Excel は BOM の無い UTF-8 の CSV を Shift_JIS として開いてしまうため、Excel でダブルクリックして開く CSV には BOM を付けます。一方で、プログラムが読む設定ファイルや JSON、シェルスクリプトでは、先頭の BOM が余計な文字として扱われて読み込みエラーになることがあるので、BOM なしにします。このツールでは、選んだ文字コードで読んだ内容をどちらの形でも保存できます。