シルギア

文字化けを直す仕組み|バイトに戻して再デコードする復元の考え方

公開日:2026年9月11日 更新日:2026年9月1日 運営:シルギア(Analyzegear, Inc.) 対象ツール:文字化け修復

メールやCSV、コピーしたテキストが「ã‚」「“ú–{Œê」のように崩れて読めなくなる——これがいわゆる文字化けです。多くはランダムに壊れているのではなく、一定の規則で「別の文字に化けている」だけで、逆算すれば元に戻せる可能性があります。このツールは化けたテキストを貼り付けるだけで、取り違えられた文字コードを推定して復元を試みます。ここではその裏側の考え方を数値例つきで解説します。

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

コンピュータは文字をそのまま保存するのではなく、バイト(0〜255の数値)の並びに置き換えて記録しています。この「文字とバイトの対応表」が文字コード(エンコーディング)です。文字化けは、保存したときの文字コードと、読み込むときの文字コードが食い違ったときに起こります。書き手が UTF-8 で書いたバイト列を受け手のソフトが別コードだと思い込んで読むと、同じバイトが別の文字として解釈され、崩れて見えます。

日本語で特に多いのが、UTF-8 のバイト列を西欧向けの1バイトコード(Latin-1 や Windows-1252)として読むパターンです。文字化けには「どのコードで書かれ、どのコードで読まれたか」という組み合わせがあり、そこを言い当てれば復元できます。

UTF-8・Shift_JIS・EUC-JP は何が違うのか

日本語でよく使われる文字コードは主に3つで、同じ1文字でもバイトの並びが異なります。

  • UTF-8:現在の事実上の標準。世界中の文字を扱え、日本語の多くは1文字3バイト、半角英数字は1バイトで ASCII と互換です。
  • Shift_JIS:Windows の日本語環境で長く使われ、多くの日本語は1文字2バイト。CSV を Excel で開くときなどに今も登場します。
  • EUC-JP:UNIX 系で使われてきたコードで、こちらも日本語は主に2バイトです。

実際に「日本語」という3文字をバイトで見ると、UTF-8 では9バイト、Shift_JIS では6バイト(93 FA 96 7B 8C EA)、EUC-JP でも6バイト(C6 FC CB DC B8 EC)と、同じ文字なのに中身がまったく違います。この違いがあるからこそ取り違えると盛大に化け、逆に言えば復元の手がかりにもなります。

化けを戻す3つのステップ

このツールは、化けが起きたのと逆の順路をたどって復元します。

  1. 各文字を1バイトに戻す。化けたテキストは「1バイトのコードで読まれた結果」なので、各文字を元のバイト値へ戻します。Windows-1252 で €・'・–・— などの記号に化けた部分は、見た目のコード値ではなく元の正しいバイト値へ復元します。
  2. バイト列を読み直す。戻したバイト列を、UTF-8・Shift_JIS・EUC-JP の3通りで順にデコードし、それぞれを復元候補にします。正しいコードで読めたときだけ、ひらがな・カタカナ・漢字が破綻なく並びます。
  3. もっともらしい順に並べる。各候補に後述の「日本語らしさスコア」を付け、高い順に並べて最有力候補を強調表示します。

不正なバイト列はデコード時に置換文字「�」(U+FFFD)に置き換わります。これは「そのコードでは読めなかった」サインで、スコアの上で不利になり、間違った候補が上位に来にくくなります。

日本語らしさスコアで候補を選ぶ

3つの候補のどれが正解かを見分けるため、復元後のテキストがどれだけ日本語らしいかを数値化します。ひらがな・カタカナ・漢字・全角記号は加点、半角英数は小さく加点、復元失敗を示す置換文字「�」や制御文字は強めに減点し、文字数で割って正規化します。日本語文字の重みは半角英数の3倍、置換文字はマイナス4と、失敗を重く見る配点です。

たとえば復元結果が「あ」1文字なら、スコアはおおよそ3.0になり、置換文字だらけの候補はマイナスに沈みます。値が大きいほど尤もらしい復元ですが、あくまで機械的な目安です。最終判断は文章の意味が通るかで行ってください。だからこそこのツールは1つに断定せず、全候補を並べて見比べられるようにしています。

具体例で見る復元

実際の挙動を、このツールで再現した代表的な3パターンで確認します。

  • UTF-8「あ」の化け:「あ」は UTF-8 で E3 81 82 の3バイト。これを Windows-1252 で読むと「ã‚」(間に見えない制御文字を含む3文字)に化けます。ツールは3バイトへ戻し、UTF-8 として読み直して「あ」を復元します(スコア約3.0で最有力)。
  • Shift_JIS「日本語」の化け:Shift_JIS の6バイトを Windows-1252 で読むと「“ú–{Œê」に化けます。ツールは Shift_JIS 候補として「日本語」を復元し、こちらも最有力になります。
  • EUC-JP「日本語」の化け:EUC-JP の6バイトが化けると「ÆüËܸì」に。こちらは EUC-JP 候補として「日本語」が復元されます。

見た目が違っても、逆算するコードを変えれば同じ「日本語」にたどり着きます。なお、化けの兆候が無くふつうの日本語と半角英数だけの入力なら、「すでに正しく表示されている可能性が高い」と判断し、無理に変換しません。

直せる化けと直せない化け

このツールが得意とするのは、UTF-8・Shift_JIS・EUC-JP のいずれかで書かれたテキストを別コードで開いた1回きりの取り違えです。一方、次のようなケースは完全には戻せません。

  • 多重の文字化け:一度化けたものをさらに別コードで保存し直すと、途中でバイトが失われ逆算の情報が欠けます。
  • 途中で切り詰められたテキスト:多バイト文字の途中でバイトが欠けると、そこは置換文字「�」として残ります。
  • 対象外のエンコーディング:ISO-2022-JP など試さないコードや、日本語以外の言語は範囲外です。

情報が欠けている場合、正しいはずの候補が置換文字だらけになり、代わりに意味の通らない別候補が高スコアで上位に来ることがあります。最有力候補のスコアが0以下だったり復元後も「�」が残るときは、この「戻しきれないサイン」だと考え、他候補も見比べてください。確実なのは、化ける前のより完全なテキストを用意し直すことです。処理はすべてブラウザ内で完結し、貼り付けたテキストは外部に送信されず、オフラインでも動きます。日頃の対策としては、保存・読込・送受信で文字コードを UTF-8 に統一しておくのが確実です。

「文字化け修復」を使ってみる →

ほかの記事

Base58/Base32/Base16変換の仕組みガイド|なぜ0OIlを除くのか cubic-bezierイージング入門|4つの数値と制御点の意味を図解 ULIDとは何か|26文字で時系列ソートできるIDの仕組みと使い分け ISBN変換・チェックの使い方|10桁と13桁の相互変換とチェックデジットの仕組み 動画の容量計算がすぐ分かる|ビットレートと長さの関係 Wi-Fi接続QRコードの仕組みと作り方|WIFI形式・エスケープ・掲示の注意

記事一覧をすべて見る →