文字化けを直す方法:「テスト」は戻せて「繝」は戻せない理由
更新日:2026-09-17
文字化けした文字列を見ると、なんとかして元に戻したくなります。ただし戻せる化け方と戻せない化け方があります。違いを整理します。
文字化けはなぜ起きるか
文字はコンピュータの中ではバイト列です。同じバイト列でも、どの文字コードで読むかによって別の文字になります。
書いたときと違う文字コードで読むと、意味の通らない文字が並びます。これが文字化けです。
「テスト」をUTF-8で書き、windows-1252で読んだ場合
UTF-8のバイト列 … E3 83 86 E3 82 B9 E3 83 88
windows-1252 は1バイト=1文字として読む
→ テスト(9文字)
戻せる化け方
上の例は戻せます。windows-1252 はすべてのバイト値に文字が割り当てられているため、9バイトが9文字として全部残っているからです。
逆の手順をたどれば復元できます。
- 化けた文字列を windows-1252 でバイト列に戻す →
E3 83 86 ... - そのバイト列を UTF-8 として読む → テスト
Web でいちばんよく見る「テスト」型の化け方は、このパターンです。iso-8859-1 で読んだ場合も同様に戻せます。
戻せない化け方
同じ「テスト」を UTF-8 で書き、Shift_JIS として読んだ場合はどうなるか。
読めなかったバイトは捨てられます
Shift_JIS には、どの文字にも当てはまらないバイトの並びがあります。読み取る側はそこで置換文字(U+FFFD、多くは「�」と表示される)を置きます。このとき元のバイトの値は失われます。何バイトが何に化けたのかも残りません。
置換文字が混じった時点で、その位置の情報は復元できません。前後の文脈から推測することはできても、確実に戻す方法はありません。
当サイトのツールは、置換文字を含む入力に対しては候補を出さず、戻せない理由を返します。もっともらしい候補を出すと、間違った復元を正解だと思って使うことになるためです。
戻せるかどうかの見分け方
| 化けた見た目 | 戻せるか | 理由 |
|---|---|---|
| テスト のようなラテン文字の羅列 | 戻せる | バイトが全部残っている |
| テのような記号混じり | 戻せることが多い | 同上 |
| � や □ が混じっている | 戻せない | その位置のバイトが失われている |
| ?????? になっている | 戻せない | 同上 |
候補の選び方:往復検証
化け方のパターンは複数あるため、機械的に戻すと候補が複数出ます。どれが正しいかをどう決めるか。
当サイトのツールでは往復検証をしています。
往復検証の手順
① 候補の組み合わせで復元してみる
② 復元した文字列を、同じ道順でもう一度化けさせる
③ その結果が入力と一致すれば、その候補は筋が通っている
見た目の読みやすさだけで順位をつけると、たまたま日本語っぽく見える誤った候補が1位になることがあります。往復して一致するかどうかを見ると、そういった候補を下げられます。
読みやすさの点数付け
往復検証に加えて、復元した文字列の「日本語らしさ」も点数にしています。ひらがな・カタカナを漢字より重く見ているのは、意味のない漢字の羅列が上位に来るのを防ぐためです。
絵文字や拡張漢字は減点していません。減点すると、絵文字を含む文字列を「戻す前のほうが読みやすい」と判定してしまい、戻せなくなるためです。
そもそも化けさせないために
- ファイルを保存するときの文字コードを UTF-8 にそろえる
- CSVを表計算ソフトで開くなら BOM 付きUTF-8 にする(CSVがExcelで化ける理由)
- 受け渡しの前に、相手のシステムが対応している文字コードを確認する
化けてしまったものを戻すより、化けない形で渡すほうが確実です。
まとめ
- 文字化けは、書いたときと違う文字コードで読むと起きる
- バイトが全部残っている化け方(テスト型)は戻せる
- 置換文字が混じった化け方は、その位置のバイトが失われていて戻せない
- 候補の順位は往復検証で決めると、誤った候補が1位になりにくい
この記事の位置づけ
仕様と一般的な動作を整理したものです。実際の挙動はブラウザやアプリの実装、受け取り側のシステムによって変わることがあります。業務で使う場合は、実際のデータで往復して確かめておくと安全です。
参考・出典
- RFC 3986: Uniform Resource Identifier (URI)
- RFC 4648: The Base16, Base32, and Base64 Data Encodings
- WHATWG Encoding Standard
※2026年9月時点の仕様と、主要なブラウザでの動作にもとづいています。