🔧 文字化け修復

「ã\x81‚」「譁�喧縺�」のように壊れて表示されるテキストを貼り付けると、文字コードの取り違えを推定して復元します。UTF-8・Shift_JIS・EUC-JP の再デコードを試し、日本語らしさで採点して最有力候補を強調表示します。処理はすべてブラウザ内で行い、入力はどこにも送信しません。

入力

壊れて見える文字列をそのまま貼り付けてください。復元候補が自動で下に表示されます。

最有力の復元候補

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

文字は保存時に「文字コード(エンコーディング)」でバイト列に変換されます。文字化けは、保存したときのコードと読み込むときのコードが食い違うときに起こります。たとえば「あ」を UTF-8 で保存すると E3 81 82 という3バイトになりますが、これを Windows-1252(西欧向け1バイトコード)だと思って読むと、1バイトずつ別の文字に割り当てられ「ã‚」のように化けます。

このツールは逆の手順をたどります。まず化けた文字列の各文字を「1バイト」とみなしてバイト列に戻し(Windows-1252 の記号は元のバイト値へ復元)、そのバイト列を UTF-8 / Shift_JIS / EUC-JP として順に読み直します。正しいコードで読み直せたときだけ、ひらがな・カタカナ・漢字がきれいに並ぶため、その「日本語らしさ」を採点して最有力候補を選びます。

なお、化けの過程で情報が失われていると(置換文字「�」が混ざるなど)完全には戻せないことがあります。その場合は候補のどれも低スコアになり、復元できない旨を表示します。

解説

文字化けは、文字を保存したときの文字コード(エンコーディング)と、読み込んだときの文字コードが食い違うときに起こります。たとえば「あ」を UTF-8 で保存すると E3 81 82 という3バイトになりますが、これを西欧向けの1バイトコード Windows-1252 だと思って読むと、1バイトずつ別の文字に割り当てられ「ã‚」のように化けます。逆に Shift_JIS や EUC-JP のバイト列を UTF-8 として読めば「譁�喧縺�」のような漢字混じりの化け方になります。本ツールは、この「取り違え」を推定して元の文字へ戻します。

復元の手順は、化けを起こしたのと逆の道をたどります。まず化けた文字列の各文字を『1バイト』とみなしてバイト列に戻します(各文字コードを &0xFF でバイト化。Windows-1252 で €・'・'・–・— などの記号に化けている部分は、コード値ではなく元のバイト値へ正しく復元します)。次に、そのバイト列を UTF-8 / Shift_JIS / EUC-JP として順に読み直し、それぞれを復元候補とします。正しいコードで読めたときだけ、ひらがな・カタカナ・漢字が破綻なく並びます。

どれが正解かを見分けるため、各候補に『日本語らしさスコア』を付けます。ひらがな・カタカナ・漢字・全角記号を加点し、復元失敗の証拠である置換文字(U+FFFD「�」)や制御文字を減点して、文字数で正規化します。スコアが最も高い候補を『最有力』として強調表示し、他の候補も並べて比較できるようにしています。人間が最終的に文脈で選べるよう、決めつけずに複数案を示す設計です。

注意点として、化けの過程ですでに情報が失われている場合(一度化けたものをさらに別コードで保存した多重文字化け、途中で切り詰められたバイト列など)は、完全には復元できません。その場合はどの候補も低スコアになり、その旨を表示します。処理はすべてブラウザ内(お使いの端末内)で完結し、貼り付けたテキストはどこにも送信されません。オフラインでも利用できます。

よくある質問

どんな文字化けに対応していますか?

日本語でよくある「UTF-8 のテキストを Latin-1 / Windows-1252 で開いた化け(ã‚ など)」「Shift_JIS や EUC-JP を UTF-8 で開いた化け(譁�喧縺� など)」に対応しています。化けた文字を1バイトに戻し、UTF-8・Shift_JIS・EUC-JP の3通りで読み直して候補を出します。

スコアは何を表していますか?

復元後のテキストの『日本語らしさ』の目安です。ひらがな・カタカナ・漢字・全角記号が多いほど加点、復元失敗を示す置換文字『�』や制御文字が多いほど減点し、文字数で割った値です。値が大きい候補ほど尤もらしい復元です。あくまで推定の指標なので、最終判断は文脈で行ってください。

「�」(黒い菱形のはてな)が残るのはなぜですか?

それは置換文字(U+FFFD)で、そのバイトが選んだエンコーディングでは有効な文字として読めなかったことを表します。化ける過程でバイトが失われた・書き換わったなど、元に戻せない情報欠落があると残ります。他の候補で改善しないか確認してください。

うまく復元できないときはどうすればいいですか?

最有力候補のスコアが0以下のときは、多重の文字化けや途中で切れたテキストの可能性があります。可能であれば、化ける前のより完全な状態のテキストを用意し直すのが確実です。また、日本語以外の言語や特殊なエンコーディング(ISO-2022-JP など)は本ツールの対象外です。

半角カナや全角英数の化けも直せますか?

はい。復元後にそれらが現れる場合はスコアで正しく評価されます。ただし入力する文字化けテキストが正しくコピーできていることが前提です。表示上のフォント違いと文字化けは別物なので、コピー元で本当に文字が変わっているかも確認してください。

入力したテキストはサーバーに送られますか?

送られません。バイト化・再デコード・スコア計算まで、すべてブラウザ内(端末内)で処理します。機密を含むテキストでも外部に送信されず、オフラインでも動作します。

なぜ複数の候補を表示するのですか?

同じバイト列でも、どのエンコーディングで読むかで結果が変わり、機械的なスコアだけでは正解を1つに断定できない場合があるためです。UTF-8・Shift_JIS・EUC-JP の結果を並べ、人が文脈で最終判断できるようにしています。

文字化けを未然に防ぐには?

テキストの保存・読み込み・送受信で文字コードを統一するのが基本です。現在は UTF-8 が事実上の標準なので、ファイルは UTF-8 で保存し、メールやCSVでは相手側の想定コードを確認しましょう。CSV を Excel で開くときの化けは、UTF-8 でも BOM 付きにすると改善することがあります。