'Hidden characters' and 'zero-width' text refer to Unicode code points that render with no visible mark and, in the true zero-width case, no width at all. They're related to but different from the visible-width blank the invisible text generator produces.
This guide covers the main hidden characters, what they're for, and why they're heavily filtered.
The main hidden characters
Zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D), and the word joiner (U+2060). They have legitimate typographic jobs — controlling where words can break, joining emoji sequences — but pasted into a name or message they're invisible and take no space.
Zero-width vs visible blank
A zero-width character has literally no width; a visible blank like Braille Pattern Blank (U+2800) has the width of a space but no mark. The visible blank survives copy-paste in more places because apps that strip 'nothing' characters don't classify it as one. See what invisible text is and blank text to copy and paste.
Why they're filtered
Zero-width characters can pad text to dodge length checks, hide watermarks in copied text, or split words to evade keyword filters. Because of that, platforms like Discord, and many chat and forum systems, actively detect and strip them. A name made only of zero-width characters is usually rejected outright.
When you'd actually want one
Rarely, for their real purpose: forcing or preventing a line break in a long string, or keeping an emoji sequence together. For blank-looking spacing in a bio or caption, the visible-width blank is the better tool because it isn't filtered as aggressively.
The zero-width family, character by character
Hidden characters are not one character, they are a small family with different jobs. Using the wrong one is why some blanks work in a name and others are stripped.
| Character | Code point | Real purpose | Blank-text behaviour |
|---|---|---|---|
| Zero-width space | U+200B | Allows a break without visible space | The usual choice for blanks |
| Zero-width non-joiner | U+200C | Prevents a cursive or Indic letter join | Works, but some editors strip it |
| Zero-width joiner | U+200D | Combines emoji into one glyph | Risky on its own, powerful in sequences |
| Word joiner | U+2060 | Prevents a line break | Behaves like a zero-width space |
| Byte order mark | U+FEFF | Marks text encoding | Often removed on paste |
| Soft hyphen | U+00AD | Suggests a hyphenation point | Invisible until a line wraps |
Finding and removing hidden characters you received
If a name or a list looks empty but behaves oddly, hidden characters are usually the cause. The quickest check is to place the cursor in the field and press the end key, then backspace. If the cursor traverses positions that show nothing, there are invisible characters in the string.
In a document, turn on paragraph marks and other formatting symbols. Most word processors visualise zero-width characters as small markers, which makes them easy to select and delete.
When you are pasting someone else's text into a system that validates input, strip the invisible characters first. Forms, filenames, and spreadsheet keys are all sensitive to a character nobody can see.