What Zalgo Text Is, and What It Costs

What Zalgo Text Is, and What It Costs

Zalgo text is ordinary letters with Unicode combining marks stacked on top of them, and every mark is a character that counts against whatever limit you are writing into. No font is involved and nothing is corrupted: the base letters are still h, e, l, l, o, with accents piled above and below until they spill into the lines around them. That is why it pastes anywhere plain text is accepted, and it is also why platforms remove it. At a typical 15 marks per letter, a five-letter word becomes 80 characters and 155 bytes, so a 280-character post holds about 17 Zalgo letters and a 150-character bio holds about nine.

Why does it paste anywhere?

Because it is plain text with nothing attached. Combining marks are ordinary Unicode characters that instruct the renderer to draw a mark over, under or through the character before them; no font, no styling and no markup is carried along. Anywhere that accepts text accepts them, which is exactly why Zalgo spread through chat applications and comment sections rather than staying in design tools.

The same property is the cost. Because the marks are characters, everything that counts characters counts them too, and the next section is where that becomes a problem.

What does it cost you in characters?

Each mark is one more character and two more bytes. The table below is the word hello with marks stacked evenly on every letter, measured against character count and UTF-8 byte count.

The word “hello” at four stacking densities. Measured with Python’s unicodedata, 2026-08-11.
Marks per letter Characters UTF-8 bytes Letters you can read
1 10 15 5
5 30 55 5
15 80 155 5
50 255 505 5

Two limits people meet immediately: a 280-character post fits roughly 17 Zalgo letters at 15 marks each, and a 150-character bio fits about nine. At 50 marks per letter, five letters take 505 bytes (a hundred times the five bytes the plain word needs) which is why storage and message systems cap it long before a human complains.

Why do platforms strip it?

Two mechanisms remove Zalgo, and they are not the same thing. Normalisation rewrites the string into a canonical form, folding marks into precomposed characters where one exists and leaving a shorter, tamer result. A mark cap counts combining marks per base character and refuses or truncates anything above a threshold. The first is usually applied to identifiers such as usernames; the second to message bodies.

The reason is layout rather than taste. Stacked marks are drawn outside the line box they belong to, so a Zalgo message overlaps the messages above and below it: text that damages other people’s content is the kind a platform removes.

Does normalisation remove the marks?

Yes, both NFC and NFKC change the string. One page ranking for this question states that normalisation does not simply erase combining marks. Measured on the same 80-character string used above, NFC returns 78 characters and NFKC also reduces it, because each form composes what it can into single precomposed characters and leaves the rest as a shorter stack.

What survives is worth stating precisely: normalisation does not delete every mark, and it is not a filter. It reduces the pile, and where a platform combines it with a mark cap the visible effect is that Zalgo simply stops working there.

How do you detect it in your own input?

Count combining marks per base character and set a ceiling. Two or three marks on a letter is ordinary written language (Vietnamese, Yoruba and transliterated Arabic all stack legitimately) while fifteen is decoration, which is the threshold the Codidact answer on this question argues about at length. A rule that rejects anything above a small per-character count keeps real languages working and stops the stacking, and it needs no list of forbidden characters.

What do screen readers do with it?

The base letters are still there, so the word is still announced; the marks are read out, skipped or spelled depending on the reader and its verbosity setting. Nothing about the text is unreadable to software, which is the honest framing for anyone deciding whether to use it in something that matters. Zalgo is a display effect that everyone’s assistive technology has to walk through character by character.

Frequently asked questions

These come up alongside the main question and are answered here rather than in sections of their own.

Does Zalgo text need a special font?

No. Combining marks are part of Unicode and every modern renderer stacks them. That is why the same string looks the same in a browser, a chat window and a text editor, and why nothing has to be installed to see it.

How much stacking is too much?

Past roughly 15 marks per letter the text overlaps its neighbours and platforms begin to truncate or reject it. The cost table shows the other reason to stop there: 15 marks already turns a five-letter word into 80 characters.

Can search engines read cursed text?

The base letters remain in the string, so the word is extractable, but the marks sit between them and the result is unpredictable in any exact match. Treat Zalgo as decoration and keep anything that needs to be found in plain letters.

Zalgo text is ordinary text with a large number of extra characters: that is what makes it paste anywhere, what makes normalisation reduce it, and what makes it expensive: 80 characters to say a five-letter word, or 255 if the stacking is heavy. Generate it with the Zalgo generator, count what it costs before pasting it into a field with a limit, and expect any platform that normalises identifiers to hand it back plain.