文字化けを直す

化けた例を入れて試す:

貼り付けると同時に復元します。Ctrl + Enter で結果をコピーします。

なぜ文字化けが起きるのか

コンピュータが保存しているのは文字ではなく、バイトの並びです。 文字をバイトに変える規則を符号化、バイトを文字に戻す規則を復号といい、 この2つに使う規則(文字コード)が食い違ったときに文字化けが起きます。

たとえば「日本語」を UTF-8 で保存すると E6 97 A5 E6 9C AC E8 AA 9E という9バイトになります。 これを Windows-1252 という別の文字コードとして読むと、1バイトずつ別の文字に割り当てられ、 日本語 という9文字になります。 データが壊れたわけではなく、同じバイト列を違う規則で読んだだけです。

したがって復元は、逆をたどれば済みます。 化けて見えている文字列を、いま読まれている文字コードでバイトに戻し、 本来の文字コードとして読み直します。

見た目からどの化け方か分かる

化け方には型があります。並んでいる文字の傾向を見れば、何と何を取り違えたのかが分かります。

見た目 元の文字 起きたこと
縺薙s縺ォ縺。縺ッ
螟画鋤
こんにちは
変換
UTF-8 のファイルを CP932(Windows の Shift_JIS)として読んだ
日本語
テスト
日本語
テスト
UTF-8 のテキストを Windows-1252 として読んだ
ハムエケ
・ニ・ケ・ネ
変換
テスト
EUC-JP のデータを CP932 として読んだ
日本語 日本語 UTF-8 を Windows-1252 として読む取り違えが、2回続けて起きた

特徴で見分ける

復元できないことがある

すべての文字化けが直せるわけではありません。 読み込みの時点で、バイトが捨てられてしまう場合があるからです。

文字コードには「このバイトの並びは存在しない」という組み合わせがあります。 読み手はそこに来ると、元のバイトを捨てて U+FFFD、置換文字)という 1文字に置き換えます。置き換えられた時点で、元が何バイトだったのかも、どんな値だったのかも残りません。

これは UTF-8 のファイルを Shift_JIS として読んだときに特に多く起きます。 UTF-8 の3バイトの並びの多くが Shift_JIS では成立しないため、あちこちが に潰れます。 譁�ュ怜喧縺代r逶エ縺� のように が混ざっていれば、その箇所はもう戻せません。

できることは、化けていない元のデータを入手し直すことだけです。

なお が見えなくても、表示しているソフトが伏せているだけの場合があります。 化けた文字列は画面からコピーするより、元のファイルをそのまま扱うほうが確実です。

化けを防ぐには

ファイルを保存するとき

メールを送るとき

プログラムから読み書きするとき