Unicode

How Zalgo text actually works

Glitch text is not a font and not an image. It is ordinary letters followed by stacked Unicode combining marks, which is why it survives copy and paste.

Files Corrupter ·

How Zalgo text actually works

Glitch text, usually called Zalgo, looks like a rendering bug. It is not. Every character of it is valid Unicode, which is exactly why you can paste it into Discord, X or an Instagram bio and it arrives intact.

Combining marks

Unicode separates a base character from the marks that decorate it. The letter e is one code point. An acute accent is another. Put them together and you get one rendered glyph from two code points.

The key property is that a combining mark takes no horizontal space. It attaches to the character before it and renders above, through or below it. The line does not get wider.

Nothing in the standard says how many you can stack. So a generator keeps piling accents onto the same letter until it spills into the lines above and below. That is the entire trick.

The three zones

The marks split into groups by where they render, which is why good generators give you three separate intensity controls.

Above, from U+0300 to U+0315 and much of U+0363 to U+036F. Breves, macrons, rings, superscript letters. This is where the height comes from.

Through, the overlay marks around U+0334 to U+0338. Strikes and tildes that sit on the letter. Adds density without height, giving the static-covered look.

Below, from U+0316 to U+0333 and U+0339 to U+033C. Cedillas, rings, dots. These are what make text bleed downward into whatever follows.

Why the character count explodes

Each mark is its own code point. A twenty-character sentence at high intensity can easily exceed a thousand code points.

This matters because platforms count code points, not what you see. A post that looks like five words gets rejected for exceeding a 280-character limit, and the error message is rarely helpful. Any generator worth using shows you both the visible length and the actual length.

Where it renders well, and where it does not

Unlike a damaged binary file, none of this is corruption in the structural sense, a distinction drawn out in what file corruption actually is.

Latin script gives the cleanest result, because the marks were designed for it. Discord renders tall stacks most faithfully. X and Instagram clip them, deliberately, to stop one post from covering the ones around it. Emoji and CJK already have their own combining behaviour, so results are uneven. Screen readers will attempt to announce every mark, which is worth remembering before putting Zalgo in a display name.

Undoing it

Stripping Zalgo is straightforward and does not require knowing which marks were added. Normalise the string to NFD, which decomposes precomposed characters into a base plus its marks, remove everything in the combining ranges, then normalise back to NFC so legitimate accents are put together again.

What that will not undo is the other family of glitch styles, the ones built from substitution rather than combination: fullwidth, circled, small caps, mathematical bold. Those are different code points entirely and need a reverse lookup table. Upside-down text needs one more step still, because the string is reversed as well as substituted.

All of this is text, where the “damage” is entirely cosmetic and the data is perfectly valid Unicode. The visual equivalent for images and video, which exploits decoder behaviour rather than typography, is covered in datamosh, pixel sorting and databending. And if you want a file that is genuinely broken rather than merely strange-looking, Files Corrupter is the other half of this site.