文字は「数値の並び」で保存される
コンピューターは、見えている文字の形をそのまま保存するわけではありません。文字をバイトという数値の並びに変えて保存します。その変換ルールが「文字コード」です。
たとえば「é」はUTF-8では C3 A9 という2つのバイトになります。これを別のルールであるWindows-1252で読むと、それぞれが別の文字に対応するため「é」と表示されます。
63 61 66 C3 A9ファイルのデータが残っていれば、正しいルールで読み直すことで元の文字が見える場合があります。日本語でも、UTF-8とShift_JISなどの組み合わせで同じことが起きます。
参考:W3C「Character encodings for beginners」、WHATWG Encoding Standard
英語やプログラムでも起こる
基本的な半角英数字はUTF-8とWindows-1252などで共通するため、その部分だけなら文字化けしにくい傾向があります。一方、アクセント付き文字、曲がった引用符、長いダッシュなどは読み違いが起こります。UTF-16の読み違いでは、基本的な英数字でも正しく表示されないことがあります。
| 対象 | 文字化けの例 | 修復候補 |
|---|---|---|
| 日本語 | 縺薙s縺ォ縺。縺ッ | こんにちは |
| 英語・欧文 | café | café |
| 英語の引用符 | It’s ready! | It’s ready! |
| コード内のコメント | // café menu | // café menu |
JavaScriptやPythonなどのソースコードもテキストです。コメントや文字列の文字化けは修復候補を探せます。ただし、削除されたコード、構文エラー、実行ファイルの破損を直す機能ではありません。
サンプルを修復ツールで試す →「読み違い」と「情報の消失」は違う
元のデータが残っている
違う文字コードで表示しているだけなら、正しく読み直せる可能性があります。文字化けが別の文字として保存された場合も、変換の経路を逆にたどれることがあります。
元の文字の情報が失われている
複数の異なる文字が同じ「�」や「?」に置き換わって保存されると、それだけでは元の文字を特定できません。このツールは文脈から文字を作り足しません。
画面に「�」が見えても、元ファイルまで壊れているとは限りません。表示の段階で置き換わっただけなら、元ファイルを正しく読み直せる場合があります。コピーした文章ではなく、受け取ったファイルを試してください。
四角い箱が表示される場合は、文字コードではなくフォント不足が原因のこともあります。もともとの「?」は普通の疑問符なので、消したり置き換えたりする必要はありません。
文字化けしたら、上書きする前に
- 元ファイルを残す。文字化けした状態で保存し直さず、コピーを作ります。
- ファイルを添付して読み直す。元ファイルがない場合は、文字化けした文章を貼り付けます。
- 候補を比べる。自動推定が合わない場合は、送り手や作成アプリで文字コードを確認して指定します。
- 別名で保存し、使うアプリで確認する。ソースコードは差分、文字コードの宣言、動作も確認します。
保存するときと、読むときのルールをそろえる
新しいテキストやウェブページでは、できるだけUTF-8で統一すると扱いやすくなります。保存、送信、データベース、読み込みの各段階で同じ文字コードを使うことが大切です。
HTMLなら <meta charset="utf-8"> の宣言だけでなく、ファイル自体もUTF-8で保存します。宣言を書き換えるだけでは、ファイルのバイト列は変わりません。サーバーの応答で指定する文字コードも合わせます。
CSVは、読み込み側で文字コードを選べる機能を使うと確実です。UTF-8のBOMが判別に役立つアプリもあります。プログラムファイルではBOMが不要なこともあるため、実行環境に合わせて選びます。
参考:W3C「Choosing & applying a character encoding」、W3C「Declaring character encodings in HTML」