In this article
You copy a blank character from one site — gone the moment you paste it. The «same» character from another site sticks. That is not luck. Exactly three mechanisms decide the fate of every invisible character, and once you can name them, any failure takes seconds to diagnose.
Mechanism one: whitespace trimming
Nearly every app tidies text before saving it: spaces at the edges are cut, repeated spaces collapsed. The reference for that tidying is the Unicode standard's official whitespace list — not what happens to look empty on screen. The regular space, the no-break space, the thin space: all are on the list, all get cut.
The survivors are characters that look blank yet are absent from the list: the Hangul Filler (category: letter) and the Braille Pattern Blank (category: symbol). As far as the tidying routine is concerned, they are ordinary content.
Mechanism two: the category check
Every Unicode codepoint carries an official category — letter, digit, symbol, separator, format, and so on. Stricter fields filter by exactly this. A name field ruling «at least one letter» admits the Hangul Filler and turns away the Zero-Width Space (category: format). Message boxes check more loosely than name boxes — which is precisely why a character can work in chat yet die in a username, and why our library sorts its 36 codepoints into three groups instead of one long list. The group is the prediction of where the character works.
Mechanism three: the byte budget
Internally, length limits are often measured in bytes. A Latin letter costs one byte; almost every invisible character costs three. Ten visible letters plus a handful of invisible padding can overflow a 20-byte field while looking half empty — the telltale symptom is a short name rejected as «too long». The byte counter in the generator exists for exactly this arithmetic.
Self-diagnosis in four steps
- Audit the clipboard. Paste into the test area: if it reports zero invisible characters, the problem is your source, not the destination app.
- Match the category. Failing in a name field? Switch to the username-safe group and retry.
- Count the bytes. Rejected for length? Fewer invisible characters, or a shorter visible part.
- Rotate the character. App rules shift with updates; when one codepoint falls, its neighbour in the same group usually still stands.
What no character can beat
Sometimes a platform decides to filter a specific codepoint outright. That is its right, and no «magic character» outruns it for long. What the three mechanisms give you is something better than magic: when a paste fails, you know which of three doors it died at — and two of those doors have keys.