Invisible character copy & paste

Six blank and invisible Unicode characters, each with its own copy button, codepoint and an honest note on where it holds up and where it gets stripped. Need several at once? The generator below builds N copies of whichever one you pick. Everything runs in your browser — nothing you copy or generate is ever sent anywhere.

Copy a blank or invisible character

Generate multiple blank characters

Pick a character and a count, then generate a string of exactly that many — useful for padding a name, sending an “empty” message, or lining text up in a monospace layout.

How invisible characters actually work

Every character you can type has a code point — a number assigned to it by the Unicode standard — and a general category that describes what kind of thing it is: a letter, a digit, punctuation, a space, or one of a handful of special categories. Most invisible characters fall into one of three of those categories:

  • Format characters (category Cf). These exist purely to change how surrounding text behaves — where a line may break, whether two letters join into a ligature — and are defined to have zero rendering width. The zero-width space, word joiner and zero-width non-joiner below are all Cf.
  • Space separators (category Zs). Ordinary spacing characters. Most fonts give them a real advance width so text after one is pushed along, exactly like the space bar produces, but some (like the no-break space here) additionally resist being collapsed or used as a line-break point.
  • Ordinary letters and symbols with no visible glyph. A small number of characters are assigned to a normal category — Letter or Symbol — but were designed from the start to render as nothing, or as an empty cell. The Hangul filler and Braille pattern blank below are both this kind: to Unicode's own classification they are not whitespace at all, they are just characters that happen to draw nothing.

That last distinction is the practical one. Software that checks “is this field blank” almost always does it by testing for whitespace — either Unicode’s own whitespace property, or a specific list of space-like characters. A character that Unicode does not classify as whitespace sails straight through that test even though a person looking at the rendered page sees nothing there.

Reference table

All six characters compared side by side. “Reliability” is a general pattern, not a guarantee for any specific site — see the honesty note further down.

Invisible and blank Unicode characters compared by codepoint, category, width and reliability
Fenced Name Codepoint Category Width Reliability
|ㅤ|Hangul FillerU+3164Lo — Letter, otherFull-width blankHigh
|⠀|Braille Pattern BlankU+2800So — Symbol, otherCell-width blankHigh
|​|Zero Width SpaceU+200BCf — FormatZero widthLow
|⁠|Word JoinerU+2060Cf — FormatZero widthLow
| |No-Break SpaceU+00A0Zs — Separator, spaceFull space widthMedium
|‌|Zero Width Non-JoinerU+200CCf — FormatZero widthLow

Every code point above is inside the Basic Multilingual Plane, so it is exactly one UTF-16 code unit — the same reason the generator’s character count and the string’s .length in JavaScript always agree.

Legitimate uses — and the one thing not to do with these

What people actually use these for

  • A display name or status that looks empty. Chat apps such as WhatsApp and Discord, and most online games, do not allow a truly empty name or status field, so people use the Hangul filler or Braille blank as a printable-but-invisible stand-in. Not affiliated with or endorsed by either of them — see the footer.
  • Keeping two words glued on one line. A no-break space between a number and its unit (10 km) or a title and a name stops them being separated by a line break in the middle.
  • Marking an optional wrap point. A zero-width space inside a long URL or hashtag lets a layout wrap it without inserting a visible space that would break the text if copied back out.
  • Padding or aligning monospace text. The generator below can build a run of a fixed-width blank character to line text up in an editor or a code block.
  • Correct script rendering. The zero-width non-joiner has a genuine linguistic job: stopping two Arabic, Persian or Indic letters from merging into a ligature when they shouldn’t.

What not to do with them

Do not use invisible characters to hide text inside a message, disguise a link, or slip banned words past a moderation filter. Spam and security tools specifically scan for zero-width characters because that exact trick is a known evasion technique, so it is also the most likely reason a platform strips or flags them — the honesty note below is really the same fact stated from the other direction. Most platforms’ terms of service treat deliberately obscured content as abuse regardless of which character achieved it, independent of any technical detection.

Be honest about reliability

None of the six characters above is guaranteed to survive every platform, every field, and every future update. Behaviour changes without notice, differs between the sign-up form and the profile-edit form on the very same site, and is rarely documented anywhere. Treat the reliability column as “more or less likely,” based on how each character is classified, not as a promise. If a field rejects one, try another from the table before assuming the whole approach is blocked.

Frequently asked questions

What is an invisible or blank Unicode character?

It is a real Unicode code point — it has its own number and its own entry in the standard — that simply has no visible ink, or renders as an empty cell. It is a genuine character, not a rendering bug: copy it and it behaves like any other letter when pasted, selected or counted, it just does not draw anything you can see.

Which of these six is the most reliable for a blank username or name field?

The Hangul Filler (U+3164) and Braille Pattern Blank (U+2800). Both are classified by Unicode as ordinary printable characters, not as whitespace, so the simple checks most sign-up forms use to reject an empty or whitespace-only field tend to leave them alone. The four zero-width and no-break characters are more likely to be trimmed, normalised or rejected specifically because software looks for them.

Why do some of these characters take up space and others don't?

They solve different problems. The Hangul filler, Braille blank and no-break space are full-width — they occupy a character cell the same way a letter would, they just don’t draw a mark inside it. The zero-width space, word joiner and zero-width non-joiner are format characters with a genuine width of zero: pasting several of them next to each other produces no visible gap at all, only extra characters in the string.

Can screen readers or a character counter tell these are there?

A character counter always can — every one of these is a real character and adds one to the count and one to the string length, which this tool’s generator shows explicitly. Screen readers vary: most modern ones silently skip zero-width format characters during normal reading, but some announce a Hangul filler or Braille blank as “blank” or read out its Unicode name, and behaviour changes between screen readers and browsers. Do not rely on either behaviour being silent.

Can invisible characters be used to hide malicious text or dodge a filter?

Technically yes, and that is exactly why zero-width characters are treated with suspicion by spam filters, phishing detectors and moderation tools — it is also the main reason the four zero-width entries in the table above are the least reliable of the six, because the software you are pasting into is often specifically looking for them. This tool exists for the ordinary uses described above: spacing, blank fields where a real blank is allowed, and layout. Do not use it to obscure text, evade moderation, or disguise a link — most platforms treat that as abuse regardless of which character was used, and it can get an account suspended.

My username field still says "this field is required" when I paste a blank character. Why?

Some forms validate on the server, not just the character content — they may run their own trim(), reject anything outside a printable-ASCII allowlist, or specifically block the exact codepoints in this table because the problem is common enough that they have already been patched against it. There is no single character guaranteed to pass every validator; try a different one from the table. If all six are rejected, that field simply does not allow a blank value.

Is there a limit on how many characters I can generate at once?

The generator clamps to 1000 per batch. That is not a technical ceiling — building a string of a few thousand identical characters is instant in any browser — it is there because almost every real destination, a username, a message, a form field, has its own much lower character limit, and a five-figure paste is more likely to be rejected outright than useful.

Do you store or see what I copy or generate?

No. Copying uses the browser’s own Clipboard API, or a hidden-textarea fallback where that API is not available, and generation is a plain string built in JavaScript running on your device. Neither step involves a network request — nothing is ever sent to a server, logged, or seen by anyone but you.

Go deeper