Zero-width and invisible
NONCHARACTERS (U+FDD0–U+FDEF)
Codepoints Unicode has permanently reserved to never be characters: U+FDD0–U+FDEF plus the last two codepoints of every plane (U+FFFE, U+FFFF, U+1FFFE, and so on).
- Range
U+FDD0–U+FDEF- Category
- Zero-width and invisible
- Removed by default
- Yes
- Governing option
- No option needed
- Can be load-bearing
- No
Where it comes from
Internal sentinels that leaked out of a program, corrupted encoding conversions, and fuzzing or payload tools that pick them precisely because nothing legitimate ever uses them.
Why it matters
They are guaranteed never to appear in interchange, so any occurrence is a bug or an intrusion. They also crash or confuse parsers, and because they are permanently unassigned they are not Format characters — a filter that scans for the "Cf" category misses them entirely.
Before and after
U+FDD0, the first noncharacter — a codepoint guaranteed to mean nothing, anywhere, forever.
The character is shown as a labelled chip so you can see where it sits. In your text it draws nothing at all.
When it is legitimate
Never, in text you send anywhere. Their only sanctioned use is as a private internal sentinel inside one program.
How to remove it
The default pass removes every one of them. Ghostchars lists them explicitly rather than relying on a category test, because their category is "unassigned".
Is it an AI watermark?
Not a watermark
No. A noncharacter in your text is a sign of a broken pipeline or a deliberate probe, never of a language model.
No connection to machine-generated text. It comes from software, from a keyboard, or from a person.
Questions
Why does Unicode reserve codepoints that can never be used?
So that programs have values they can safely use internally as sentinels, knowing no real text will ever contain them.
Why do other cleaners miss them?
Most scan for the Unicode "format" category. Noncharacters are permanently unassigned, so they are not in it and have to be listed by hand.
Check your own text
Paste anything into the cleaner to see every hidden character it contains, with position, codepoint and what happens to each one. Nothing is uploaded.