Mojibake Fixer
café, don’t, über — text that went through the wrong
decoder. Paste it and get the original back, along with an explanation of what went wrong.
🔒 Your text never leaves your browser.
What actually happened to your text
Your data was stored as UTF-8, where anything beyond plain ASCII takes two or
more bytes. Something then read those bytes as if each one were a separate character in a
single-byte encoding — usually CP1252 (Windows) or ISO-8859-1. The
two bytes of é became the two characters é, and so on down the file.
Nothing is lost in that process, which is why it can be undone exactly: encode the mangled characters back into bytes with the same wrong encoding, then decode those bytes as UTF-8.
Why this works where lookup tables fail
Most "mojibake fixers" carry a table of substitutions — é → é,
’ → ’ — and quietly give up on anything not in the table. This tool
does not have a table. It runs the encoding chain in reverse, so Japanese, Greek, emoji and
symbols you have never seen all repair the same way. And it checks its own work: the repaired
text is pushed back through the broken chain, and only offered to you if it reproduces your
input exactly.
Double encoding
When a file passes through the same broken pipeline twice, the damage nests:
é → é → é. A single repair pass leaves it looking
only slightly less broken. This tool tries multiple layers and tells you how many it had to
undo.
The one thing that cannot be repaired
If you see � (U+FFFD), a decoder already gave up on those bytes and replaced them
with a placeholder. The original bytes are gone — no tool can bring them back, and any tool
claiming otherwise is guessing. Re-export from the source instead.
Fix the pipeline, not just the text
Repairing the characters solves today's file. The import that broke it will break tomorrow's too, so it is worth telling that tool the file is UTF-8 while you are here.
What this tool reports (6 findings)
MOJ-D01UTF-8 text read as a single-byte encoding
The classic mojibake: text stored as UTF-8 was read by something that assumed CP1252 or ISO-8859-1. Every non-ASCII character becomes two or three Latin characters — "café" turns into "café", an apostrophe into "’".
Fix: Fix the reader, not the text: tell the importing tool the file is UTF-8. Repairing the characters works, but the same import will corrupt the next file too.
Source: Derived from the mechanics of UTF-8 and the single-byte encodings it is commonly mis-read as (CP1252, ISO-8859-1). The repair is executed rather than looked up, and every repair round-trips back to the input in our regression tests.
MOJ-D02Double-encoded UTF-8
The text went through the same mis-reading twice, so the damage is nested — "é" became "é" and then "é". Each pass adds another layer, and a single-pass repair leaves it still broken.
Fix: Repair as many layers as were applied; this tool reports how many it found.
Source: Derived from the mechanics of UTF-8 and the single-byte encodings it is commonly mis-read as (CP1252, ISO-8859-1). The repair is executed rather than looked up, and every repair round-trips back to the input in our regression tests.
MOJ-D03Replacement characters present
U+FFFD (the � symbol) means a decoder already gave up on those bytes and substituted a placeholder. Unlike mojibake, this is NOT reversible — the original bytes are gone.
Fix: Re-export from the source with the correct encoding. No tool can recover the original characters from a replacement character.
Source: Derived from the mechanics of UTF-8 and the single-byte encodings it is commonly mis-read as (CP1252, ISO-8859-1). The repair is executed rather than looked up, and every repair round-trips back to the input in our regression tests.
MOJ-D04No damage detected
The text contains no sequences characteristic of an encoding mix-up.
Source: Derived from the mechanics of UTF-8 and the single-byte encodings it is commonly mis-read as (CP1252, ISO-8859-1). The repair is executed rather than looked up, and every repair round-trips back to the input in our regression tests.
MOJ-R01Repair verified by round-trip
The proposed repair was re-encoded through the same broken chain and reproduced the input exactly, which is what makes it a repair rather than a guess.
Source: Derived from the mechanics of UTF-8 and the single-byte encodings it is commonly mis-read as (CP1252, ISO-8859-1). The repair is executed rather than looked up, and every repair round-trips back to the input in our regression tests.
MOJ-R02Damage detected but not repairable
The text shows mojibake signatures, but no encoding chain reproduces it — usually because it has been partially fixed already, mixes damaged and clean text, or was mangled by an encoding this tool does not model.
Fix: Go back to the source file and re-export it as UTF-8 rather than trying to repair the damaged copy.
Source: Derived from the mechanics of UTF-8 and the single-byte encodings it is commonly mis-read as (CP1252, ISO-8859-1). The repair is executed rather than looked up, and every repair round-trips back to the input in our regression tests.