文字化け修復ツール

éがéに、アポストロフィが’に化けても、たいていの場合文字は失われていません。何かが間違った文字表で読んだだけです。テキストを貼り付ければ、正しい方法で読み直します。

修復したテキスト

修復済み 推定です。確認してください 失われています。入力し直してください · 強調表示された語にポインターを合わせるかタップすると、元の文字が表示されます。

修復はブラウザ内で行われます。テキストはどこにも送信されません。

1つの文字、2通りの読み方

ファイルの中に文字はありません。あるのはバイトと呼ばれる数値で、文字コード(エンコーディング)とは、どの数値がどの文字を表すかを決めた表です。今書かれるもののほとんどはUTF-8を使っていて、基本的なアルファベットは1バイト、アクセント付き文字は2バイト、カーリークォートやユーロ記号などの記号は3バイトになります。

Windows-1252は、すべての文字がちょうど1バイトの古い表です。UTF-8のテキストをこの古い表で読むプログラムに渡すと、各バイトがそれぞれ1文字として表示されます。éの2バイト(C3 A9)はÃと©として現れます。この損傷には日本語から借りた名前、mojibake(文字化け)が付いていて、おそらく次のような形で見たことがあるはずです。

書いたもの表示されたもの見かける例
é èé ècafé, crème
ü ö ßü ö ßZürich, Köln, Straße
ññseñor, España
ã çã çSão Paulo, ação
ø åø Ã¥København, Århus
’ “ —’ “ —don’t、引用文、ダッシュ
€â‚¬価格

修復のしくみ

ツールはテキストを順にたどり、Windows-1252の上半分にある文字の並びに出会うたびに止まります。それぞれを元のバイトに戻し、そのバイト列が正しいUTF-8の文字になるかを確かめます。

正しいとは、C2〜F4の先頭バイトの後に、決まった数の継続バイト(80〜BF)が続き、冗長な表現もサロゲートの値もないことです。条件を満たせば、その並びをエンコードされている文字に置き換えます。満たさなければ何も変えません。この判定が、正しく書かれたテキストを守る役目も果たします。正常な「café」のéはWindows-1252では1バイトで、1バイトがUTF-8の2バイトの組に見えることはありえません。

化けた状態で保存され、さらに化けたテキストには、éのような長い連なりが現れます。ツールは最大5回まで処理を繰り返し、そのたびに1層ずつはがして、テキストが変わらなくなるまで続けます。

3種類の強調表示の読み方

修復済み
バイトがきれいにデコードできたので、この変更は安全です。単語にポインターを合わせると、何を置き換えたかが表示されます。
推測、要確認
1バイトが欠けていたので、ツールが穴を埋めました。2つのケースがあります。Ãの後にスペースが続く場合はàと読みます。この文字の2バイト目(A0)はノーブレークスペースでもあり、普通のスペースに置き換えられてしまうことが多いからです。単独のâ€は閉じのカーリークォートと読みます。3バイト目(9D)はWindows-1252に対応する文字がなく、消えてしまいがちだからです。ツールがこの推測をするのは、テキストに文字化けの明らかな兆候が他にもある場合だけです。
消失、入力し直し
�、またはr?sum?のように2文字の間に挟まった疑問符です。保存前にどこかのプログラムが文字を置き換えてしまい、デコードできるバイトが残っていません。ツールはその場所に印を付けるので、文字はあなたが補ってください。

スペースの前にぽつんとあるÂは、ノーブレークスペースの前半です。ツールはこれを取り除き、残ったスペースに薄い印を付けて、普通のスペースと見分けられるようにします。

発生源で止める

貼り付けたテキストを修復しても、症状を治すだけです。上流のどこかで、あるプログラムがUTF-8で書き、別のプログラムがそれを知らされていません。よくある場所は次のとおりです。

ExcelでCSVを開いた
CSVをダブルクリックすると、ExcelはWindowsの古い表を前提にします。代わりに「データ」から「テキストまたはCSVから」を選び、「元のファイル」を65001: Unicode (UTF-8)に設定します。書き出すときは「CSV UTF-8(コンマ区切り)」を選びます。
MySQLやMariaDBのデータベース
latin1と宣言された列にUTF-8のバイトが入っている、またはダンプを間違った--default-character-setでインポートした場合です。テーブルと接続の両方でutf8mb4を使うべきです。
ウェブページ
<head>の最初に<meta charset="utf-8">を置き、サーバーからContent-Type: text/html; charset=utf-8を送るようにします。
メールやテキストファイル
メールではヘッダーContent-Type: text/plain; charset=UTF-8を使います。ファイルはエディターの「エンコードを指定して保存」メニューからUTF-8で保存します。

データベース全体の変換は、段落1つを直すのとは別の作業です。完全なバックアップを取り、コピーで変換を実行し、本番サイトに触れる前に行を比較してください。すでに正しいテキストに変換をかけると、そのテキストを壊してしまいます。

復元できないもの

このツールが扱うのは1種類の事故だけですが、それが群を抜いて多い事故です。UTF-8をWindows-1252またはLatin-1として読んでしまったケースです。取り違えがそれである限り、ギリシャ文字やキリル文字を含め、どの言語にも対応します。Mac Roman(éが√©になる)、Windows-1251、Shift-JISなど他の組み合わせは対象外です。Ãとスペースをàにする推測は、その文字を単語として使うイタリア語やポルトガル語などに向いています。それ以外のテキストでは確認してください。

よくある質問

éがéと表示されるのはなぜですか?

テキストがéを2バイトで表すUTF-8で保存され、すべてのバイトを1文字として扱うWindows-1252で開かれたからです。2バイトがÃと©として表示されます。この段階では何も失われていないので、元に戻せます。

テキスト中の’は何を意味しますか?

カーリーアポストロフィ(’)です。この記号はUTF-8で3バイトを使い、それぞれが別々に表示されました。同じ事故で、開きの引用符は“に、長いダッシュは—になります。

スペースや£の前にÂが付くのはなぜですか?

ノーブレークスペースはC2 A0の2バイト、ポンド記号はC2 A3です。間違った表で読むと、1バイト目が目に見えるÂになります。ツールはこれを取り除き、後に続く文字を残します。

疑問符や黒いひし形(�)も直せますか?

いいえ。これはプログラムが文字を表現できず、保存前に置き換えたときに現れるもので、元のバイトはもう残っていません。ツールが1つずつ強調表示するので、入力し直してください。

WordPressサイト全体の文字化けを直すには?

wp-config.phpのDB_CHARSETがutf8mb4になっているか、テーブルがlatin1の照合順序を使っていないかを確認します。数ページだけなら、各テキストをここに貼り付け、修復版を戻してください。データベース全体の場合は、バックアップを確保したうえで、まずコピーでテーブルを変換してもらいましょう。

貼り付けたテキストはサーバーに送られますか?

いいえ。デコードはブラウザー内のスクリプトが行い、ページがあなたのテキストを含むリクエストを送ることはありません。