Skip to site navigation
Text

Invisible character

Eleven blank characters, each one named, with the one thing that decides whether it works: is it whitespace or not.

Hangul FillerU+3164

The brackets are drawn by this page. Only what sits between them is copied.

Every invisible character, and what each one is for

The column that decides whether a blank username works is Trimmed, not width. Anything counted as whitespace is stripped from the ends of a field before the site checks whether you left it empty. The two at the top are not whitespace, which is why they survive. One catch worth knowing: U+FEFF is zero width but browsers still trim it, because JavaScript counts it as whitespace even though Unicode does not.

CharacterCodeWidthTrimmed
[]Lo
U+3164wideno
The default choice for a blank username. Unicode files it as a letter, not a space, so trimming and empty-field checks both let it through, and it renders as blank space in essentially every font that ships on phones. It is a full-width character, so one of these is about as wide as two Latin letters. Fields with a tight character limit fill up faster than the blank space suggests.
[]So
U+2800narrowno
The narrower alternative when U+3164 is too wide. Also not a space by Unicode's reckoning, so it survives trimming the same way. Font coverage is good but not universal. On a device with no braille-capable font it can come out as a hollow box.
[]Cf
U+200Bzerono
Takes up no width at all. Its real use is inserting a break opportunity inside a long word, or separating two characters that would otherwise combine. The most widely known invisible character and therefore the most widely filtered. Discord and Instagram both strip it from names in many places, which is usually why a tutorial that says to use this one no longer works.
[]Cf
U+200Czerono
Stops two adjacent characters from forming a ligature or joined form. Genuinely load-bearing in Persian and Hindi text, which is part of why platforms are slower to filter it out.
[]Cf
U+200Dzerono
The opposite of the non-joiner, and the glue inside multi-part emoji. A family emoji is several people joined by these. Because emoji depend on it, pasting one next to an emoji can change which emoji you get rather than adding blank space.
[]Cf
U+2060zerono
Zero width, and specifically forbids a line break at that point. The modern replacement for using U+FEFF as a no-break marker.
[]Cf
U+2063zerono
Intended for mathematical notation, as an invisible comma between indices. Rarely filtered precisely because almost nobody uses it.
[]Cf
U+FEFFzeroyes
The byte order mark. Zero width, and historically used the way U+2060 is used now. Riskiest one here, and the one exception to the rule that zero-width characters survive trimming: JavaScript counts it as whitespace even though Unicode does not, so browser-side validation strips it from the ends of a field. On top of that, many tools read it as an encoding marker rather than text. Use U+2060 instead unless you specifically want a BOM.
[ ]Zs
U+00A0narrowyes
A normal-looking space that will not break across lines. Good for keeping a number next to its unit; not useful for a blank name. Unicode counts it as whitespace, so trimming removes it from the ends of a field.
[]Zs
U+2003wideyes
A fixed-width space as wide as the font size. Useful for indentation that survives a copy and paste. Whitespace, so it is trimmed from the ends of a field.
[ ]Zs
U+3000wideyes
The full-width space used in Chinese, Japanese and Korean typesetting. The widest single blank here. Whitespace, so it is trimmed from the ends of a field.

Check which invisible character you copied

Paste back into this box and it will name every invisible character it finds. Nothing typed here leaves your device.


Mechanism

How an invisible character can be blank without being a space

Every character here renders as nothing, but they fall into two groups that behave completely differently. The spaces — U+00A0, U+2003, U+3000 and the rest — carry Unicode's White_Space property, so the moment a site calls trim on your input they are stripped from both ends and the field counts as empty. The other group is blank by accident of design rather than by category: U+3164 is filed as a Hangul letter and U+2800 as a braille symbol, and both happen to have nothing to draw. String handling treats them as ordinary text, so trimming leaves them alone and an empty-field check passes. That distinction, not the width, is why one invisible character works in a username and another does not.

Limits

What it cannot do

  • A field that rejects your paste is usually filtering at the server, and nothing on this page can change that. Discord and Instagram both strip U+200B from names in several places.
  • These are characters, not formatting. Anywhere that normalises Unicode before storing it — some login systems do — may fold them away or refuse the value outright.
  • Screen readers announce nothing for them, so a name built out of blanks is unreadable to anyone using one. That is worth knowing before you make it your permanent handle.
Questions

Questions people actually ask

Which invisible character should I use?
U+3164, the Hangul Filler, unless you have a reason not to. It is not whitespace, so it survives trimming; font coverage on phones is essentially universal, so it does not show as a box. Its only drawback is that it is full width, so it eats character limits about twice as fast as you would expect.
Why does my invisible character keep disappearing?
Almost always one of two things. Either you copied one of the space characters, and the site trimmed it off the ends before saving; or you copied U+200B, which is the best known of these and therefore the most widely filtered. Try U+3164 instead — it is neither whitespace nor on the usual blocklists.