Corrupted Text Generator
Make text look like it came out of a damaged file: lost bytes (�), mojibake (é), flipped bits, escaped bytes and blacked-out words, each copyable. Paste garbled text such as “it’s” and it is repaired for you.
Fine-tune
Corrupted: 16 of 44 characters hit. The same pattern always gives the same damage; raising the slider only adds more.
- CorruptedAll of it at once
R�od 04�7: Don't op�n ▒ ▒oor - it's ���l �n▒id�.
- Broken bytes� where bytes were lost
Recor� 0�17: �on't �pen th� door � ��'� �til� �n�ide.
- MojibakeUTF-8 read as Windows-1252
Record 0417: Don’t open the door – it’s still inside.
- Bit flipsOne bit wrong per hit
Record 0$17: Dmo'd OpEo tle t␡op - id's stil| insa$e.
- Escaped bytesAs Python prints them
Rec\x98\xa8d 0417\xa7 Do\xfd't op\x8f\xea t\x91e door \xa7 it\x94s st\xb2ll in\xde\x9ade.
- RedactedWhole words blacked out
Record 0417: █████ ████ the door - ████ still inside.
Six kinds of damage and what causes each
Real corrupted text is not random noise. Each kind of damage has a cause, and the cause decides what the reader sees: a lost byte gives a �, a wrong encoding gives à and â€, a flipped bit swaps one letter for its neighbour in the ASCII table. The styles here copy those patterns, so a “recovered file” in a game or story looks like the real thing rather than a random mix of symbols.
| Style | Imitates | What “it’s inside” can become |
|---|---|---|
| Corrupted | Several faults at once: lost bytes, flipped bits, dropped and doubled letters, a worn ▒ | it’s i▒sde |
| Broken bytes | A decoder hitting bytes that are not valid UTF-8 | it’� ins�de |
| Mojibake | Correct UTF-8 opened as Windows-1252 or “Latin-1” | it’s inside |
| Bit flips | Faulty memory, storage or a noisy line changing single bits | it’s inqide |
| Escaped bytes | A program printing bytes it could not decode, Python style | it’s in\xd3ide |
| Redacted | A censored document with words blacked out | ████ inside |
Only the Corrupted style mixes faults. If you want the damage to tell a story, pick the one that fits it: mojibake for an old email archive or a badly exported spreadsheet, broken bytes for a half-downloaded file, bit flips for failing hardware or a transmission from deep space, escaped bytes for a programmer’s log.
Mojibake: é instead of é
Mojibake (Japanese for “character transformation”) is what happens when text saved in one encoding is read in another. The common case today is UTF-8 read as Windows-1252. In UTF-8, é is two bytes, C3 A9. Windows-1252 has one character per byte, so it shows C3 as à and A9 as ©, and café becomes café. The curly apostrophe ’ is three bytes, E2 80 99, which Windows-1252 reads as â, € and ™.
Plain ASCII letters are the same in both encodings, so mojibake only bites on accented letters, curly quotes, dashes, symbols and emoji. That is why the Mojibake row has no damage setting, and why the generator first turns straight quotes into curly ones as Word does when you type. Without that step an English sentence would usually come through untouched.
Worked example. “Record 0417: Don’t open the door – it’s still inside.” has three characters outside ASCII: two apostrophes and an en dash. Read as Windows-1252 it becomes “Record 0417: Don’t open the door – it’s still inside.” The other 41 non-space characters are unchanged, and the line grows from 53 to 59 characters because each of the three became three.
| You see | Should be | UTF-8 bytes |
|---|---|---|
| é è á | é è á | C3 A9 · C3 A8 · C3 A1 |
| ñ ü ö ç | ñ ü ö ç | C3 B1 · C3 BC · C3 B6 · C3 A7 |
| ß | ß | C3 9F |
| ’ ‘ | ’ ‘ | E2 80 99 · E2 80 98 |
| “ †| “ ” | E2 80 9C · E2 80 9D |
| – — | – — | E2 80 93 · E2 80 94 |
| … | … | E2 80 A6 |
| £  (before a space) | £ non-breaking space | C2 A3 · C2 A0 |
| € | € | E2 82 AC |
| 😀 | 😀 | F0 9F 98 80 |
| é | é, garbled twice | C3 A9 → é → é |
The right double quote ” leaves only “— on screen because its last byte, 9D, is not a printable character in Windows-1252; browsers decode it as an invisible control character, and it is often lost when the text is copied. The last row shows mojibake applied twice: each pass makes it longer, and à followed by Æ, ƒ or  is the sign that it happened more than once.
“Latin-1” and “ISO-8859-1” behave the same way in a browser. The WHATWG Encoding Standard, which all current browsers follow, treats those labels, and even “ascii”, as names for Windows-1252.
The replacement character �
� is U+FFFD REPLACEMENT CHARACTER, the symbol a decoder writes when it meets bytes that are not valid in the encoding it was told to use. Unlike mojibake, the original is gone: the program has already thrown the bad bytes away and kept only the marker. In UTF-8, � itself is stored as EF BF BD, so a � that is then garbled as mojibake shows up as �.
Unicode’s recommended practice, followed by browsers, is one � for each maximal subpart: the longest run of bytes that could have been the start of a valid character. So a file cut off in the middle of € (E2 82 AC) ends in a single �, not two, and a lone é saved in Windows-1252 (byte E9) and read as UTF-8 gives “caf�”.
| Bytes | Why it fails | Shown as |
|---|---|---|
| 63 61 66 E9 | E9 starts a three-byte character but nothing follows | caf� |
| 63 61 66 C3 | File cut off after the first half of é | caf� |
| E2 80 21 | Two bytes of a curly quote, then a plain “!” | �! |
| FF | Never valid anywhere in UTF-8 | � |
The Broken bytes row replaces each hit character with one �, whatever its length. That matches what you see when a single byte inside a character is damaged; real files with long damaged stretches can show many � in a row.
Bit flips: one wrong bit, one wrong letter
Every ASCII character is a 7-bit number, and flipping any one bit gives another character a fixed distance away in the table. That makes bit-flip damage look strangely regular: some letters swap case, some turn into digits or punctuation, and some become control codes that have no visible form. The Bit flips row shows control codes as the Unicode Control Pictures ␀ to ␟ and ␡, so they can be seen and copied.
Worked example. e is 0x65, binary 1100101. Flipping each of its seven bits in turn gives d, g, a, m, u, E and %. Bit 5 is worth 32, the exact gap between capitals and small letters, which is why a flipped e so often becomes E.
| Bit (value) | e | A | r |
|---|---|---|---|
| 0 (1) | d | @ | s |
| 1 (2) | g | C | p |
| 2 (4) | a | E | v |
| 3 (8) | m | I | z |
| 4 (16) | u | Q | b |
| 5 (32) | E | a | R |
| 6 (64) | % | ␁ | 2 |
Bit flips happen outside fiction too. In 2011 Artem Dinaburg registered domains one bit away from popular ones, such as mic2osoft.com (r is 0x72, 2 is 0x32, so bit 6 differs), and logged 52,317 requests from 12,949 IP addresses over about seven months from machines whose memory had flipped a bit in a domain name. He called it bitsquatting; most consumer computers and phones have no error-correcting memory to catch it.
Redacted text is a look, not redaction
The Redacted row replaces whole words with one █ per letter, so the length of each hidden word still shows, as it does on a real blacked-out page. Punctuation and spaces stay where they were. It is meant for case files, puzzle props and fictional dossiers.
Do not use it to hide anything real. You choose the damage level, not which words go, so a name can survive, and the letter count of a hidden word can be enough to guess it. To redact a real document, use the redaction feature of a PDF editor, which removes the text underneath; a black box drawn on top leaves the words in the file, where they can be copied out.
Fixing real corrupted text
Mojibake can usually be undone, because no information was lost: the bytes are still there, just shown with the wrong character set. Paste text like “it’s “fresh†and café costs £3” into the box and a Repaired text row appears with “it’s “fresh” and café costs £3”. It reverses UTF-8-as-Windows-1252 up to three times, so double mojibake (é) comes back too, and it restores a bare †as ”, the case where the invisible last byte was lost. Text that is already correct, such as café or naïve, is left alone.
Better still is to stop it at the source. A CSV that shows é in Excel was saved as UTF-8 and opened as Windows-1252: import it through Data, From Text/CSV and set File origin to 65001: Unicode (UTF-8), or save the file as “CSV UTF-8” in the first place. On a web page, declare <meta charset="utf-8"> in the first 1,024 bytes. For large amounts of text in Python, the ftfy library detects and fixes mojibake across many encodings, not just this one.
� and bit flips cannot be fixed from the text alone. The original bytes were replaced or changed, so the only real fix is an older copy of the file, or a format with a checksum or error correction that can rebuild it.
Choosing a damage level
Damage is the chance that each character is hit, so at 30% roughly three characters in ten change, though a short line can land above or below that. Spaces and line breaks are never touched, which keeps word shapes visible even when most letters have gone. Each position has its own fixed roll, so raising the slider only adds damage and typing more text does not reshuffle the start. New pattern picks a different set of rolls.
Worked example. The sample sentence “Record 0417: Don't open the door - it's still inside.” has 44 characters that can be hit. In the Corrupted row on the starting pattern, 10% hits 5 of them and leaves it easy to read; 30% hits 16 and gives “R�od 04�7: Don't op�n ▒ ▒oor - it's ���l �n▒id�.”; 60% hits 30 and only fragments remain. With “Keep the first and last letter of every word” ticked, only 26 characters can be hit, and 30% gives “R�od 04�7: Don't op�n te door - it's s��ll in▒ide.”, which most readers can still work out.
| Damage | Reads as | Good for |
|---|---|---|
| 5–15% | Readable with a few scars | A message the reader must understand |
| 20–40% | A puzzle; key words may need guessing | Clues, ARGs, recovered logs |
| 50–70% | Fragments | Lost records, atmosphere |
| 80–100% | Noise | Backgrounds and texture |
For marks stacked above and below letters, the Zalgo look, use the glitch text generator or the cursed text generator. Those keep every letter and pile combining marks on top; this page removes and replaces the characters themselves.
Frequently asked questions
Can I paste corrupted text into Discord, Instagram or a game chat?
Usually, yes. Every style uses ordinary Unicode characters. Two things to watch: escaped bytes and mojibake make the text longer, and the control pictures (␀ ␛) from bit flips may show as boxes in fonts that lack them.
Why does the Mojibake row look the same as my text?
Your text is plain ASCII with no curly quotes, so there is nothing to garble. Turn on the curly-quotes option under Fine-tune, or add an accented letter, a £ or an emoji.
How do I get exactly the same result again?
Use the same text, damage and pattern. The pattern resets to the starting one when you reload the page; after pressing New pattern, copy the result you like rather than relying on getting it back.
Will this damage a real file?
No. It only changes the text in the box, in your browser. Nothing is uploaded, and there is no file involved.
Can it fix text full of � symbols?
No. A � means the original bytes were thrown away when the text was decoded. Go back to the source file and open it with the right encoding, usually UTF-8.
Sources
- WHATWG Encoding Standard, windows-1252 index: the byte-to-character table the mojibake and repair use
- WHATWG Encoding Standard: “latin1”, “iso-8859-1” and “ascii” as labels for windows-1252
- The Unicode Standard, chapter 3: UTF-8 well-formedness and U+FFFD substitution of maximal subparts
- Unicode, Specials code chart (U+FFF0–FFFF): U+FFFD REPLACEMENT CHARACTER
- Unicode, Control Pictures code chart (U+2400–243F): visible symbols for control codes ␀–␟ and ␡
- Python documentation, codecs error handlers: backslashreplace and the \xhh form
- Artem Dinaburg, Bitsquatting: DNS Hijacking without Exploitation (Black Hat USA 2011): mic2osoft.com and 52,317 requests from bit-flipped domain names
- ftfy documentation: detecting and fixing mojibake in Python
- Unicode Standard Annex #29, Text Segmentation: characters and words as the generator splits them, so emoji and accents stay whole
Related Tools
Convert plain text to circled bubble Unicode text and back.
Typewriter text in six styles to copy and paste, and back to plain.
Tiny text in six styles: small caps, superscript, subscript and formulas, and back to plain.
Text to Morse and back, with sound, adjustable speed and WAV download.
Glitch text in five styles with intensity, letters hit and marks above, through or below.
Cursed Zalgo text in six strengths, including text that gets worse as it goes.