Invisible character
Copy an invisible character or a run of blank text that shows nothing when pasted — and check any text for hidden characters already lurking in it.
Nothing shows between the brackets — that is the point. The line above confirms what is actually on your clipboard.
Paste text above to scan it.
| Hidden character | Code | Count |
|---|
What an invisible character is
An invisible character is a Unicode code point that a font draws as nothing. It is a real character — it occupies a position in the string, counts towards a length, and can be copied and pasted — but it has no visible glyph, so text containing one looks exactly like text without it. That combination is what makes invisible characters useful for getting blank content past a system that insists on something, and what makes them a notorious source of bugs when they arrive unnoticed.
They divide into two groups that behave very differently in practice, and choosing the wrong group is the usual reason an invisible character "does not work". Zero-width characters, such as U+200B, take up no horizontal space whatsoever; they are genuinely undetectable on screen but are also the first thing a validator strips. Blank-width characters, such as U+3164 HANGUL FILLER or U+2800 BRAILLE PATTERN BLANK, render as an empty gap roughly the width of a space, yet Unicode classifies them as letters or symbols rather than whitespace — so a check for "empty or whitespace only" passes them through. If a field rejects your invisible character, that distinction is almost always the explanation.
The invisible characters that actually work
Dozens of code points have no visible glyph, but only a handful behave reliably across the places people want to use them. These are the ones in the picker above.
| Character | Code | Width | Best for |
|---|---|---|---|
| Zero-width space | U+200B | None | True invisibility; breaking long URLs across lines |
| Hangul filler | U+3164 | Space | Blank names and usernames that reject empty input |
| Braille pattern blank | U+2800 | Space | Blank lines in bios; blank chat messages |
| Word joiner | U+2060 | None | Preventing a line break without adding a gap |
| Zero-width non-joiner | U+200C | None | A fallback when U+200B is stripped |
| Zero-width joiner | U+200D | None | Joining emoji into sequences |
| No-break space | U+00A0 | Space | HTML spacing that must not collapse |
| Hangul Jungseong filler | U+1160 | None / space | An alternative when U+3164 is blocked |
| Soft hyphen | U+00AD | None | A hyphen that appears only if the word wraps |
| Invisible separator | U+2063 | None | Separating values in mathematical markup |
The history of zero-width characters
None of these characters were invented to produce blank usernames. Almost all of them exist to solve genuine typographic problems in writing systems other than English, and their repurposing as "invisible text" is an accident of how Unicode classification interacts with form validation.
The zero-width space arrived in Unicode 1.1 in 1993 to mark line-break opportunities in scripts such as Thai and Khmer, which are written without spaces between words. The zero-width non-joiner and zero-width joiner, U+200C and U+200D, were added for Arabic and Indic scripts, where whether two adjacent letters connect changes the meaning — and the joiner later found an unexpected second career as the glue in emoji sequences, which is why a family emoji is really several people emoji joined by invisible U+200D characters. U+FEFF began life as the byte-order mark; its use as a zero-width no-break space was deprecated in Unicode 3.2 in 2002 in favour of U+2060 WORD JOINER, which is why a stray U+FEFF at the start of a file is a common encoding bug rather than a deliberate choice.
The blank-width characters have stranger origins still. U+3164 HANGUL FILLER dates from Unicode 1.0 and exists to represent an incomplete Korean syllable block — a placeholder for a missing vowel or consonant — which is precisely why it is categorised as a letter and sails through validation that blocks spaces. U+2800 BRAILLE PATTERN BLANK is the braille cell with no dots raised: a legitimate character in braille, and an empty rectangle everywhere else. And U+180E MONGOLIAN VOWEL SEPARATOR is a cautionary tale about relying on any of this: it was reclassified from a space character to a zero-width format character in Unicode 6.3 in 2013, which silently changed its behaviour in every system that updated.
Where invisible characters fail
Four mechanisms account for nearly every disappearing invisible character, and knowing which one you have hit tells you what to try instead.
Trimming. Most form handlers call a trim on input and then test whether the result is empty. Whether your character survives depends entirely on whether that language's trim considers it whitespace — and implementations disagree, which is why the same character works on one site and not the next. HTML collapsing. A browser renders any run of ordinary whitespace as a single space, so repeated spaces vanish on a web page even when they are present in the source; U+00A0 exists precisely to defeat this. Content validation. Chat and social platforms often require a message or display name to contain at least one visible character, and some maintain an explicit blocklist of known blank code points. Normalisation. Unicode normalisation forms, applied by some search indexes, databases and identity systems, remove or substitute format characters as a matter of course.
The practical order to try is: zero-width space first, since it is the most genuinely invisible; Hangul filler next, which defeats most emptiness checks; braille blank third, which is the most robust but renders as a slightly wider gap. If all three fail, the platform is deliberately blocking blank input and no character will get around it.
Finding hidden characters in text you did not write
The other half of this tool matters more often than the first. Text copied from a web page, a PDF, a Word document or a spreadsheet routinely arrives carrying invisible passengers: a zero-width space inside a product code, a no-break space where a normal space should be, a byte-order mark at the start of a CSV, a soft hyphen in the middle of a word. Because the text looks correct, the resulting failures are bewildering — a lookup that returns nothing for a value you can see is right there, a CSS class that refuses to apply, a CSV column that will not parse, an API key rejected as invalid, a password that fails despite being typed correctly.
Pasting the text into the panel above counts every hidden character, names it, gives its code point and shows you where in the string it sits, which turns a mystery into a one-line fix. Stripping them is then a single click. For the related tidying jobs, remove extra spaces collapses the ordinary whitespace that is left behind, remove line breaks rejoins text that a PDF broke into fragments, and the character counter confirms the length you end up with. Going the other way, special characters & symbols covers the visible symbols and accents, HTML encoder / decoder converts any of them to and from entity codes such as ​, and the fancy text generator handles styled Unicode lettering for bios.
Frequently asked questions
How do I copy an invisible character?
Pick a character from the list, choose how many copies you want, and press Copy invisible text. Nothing appears between the brackets, which is exactly right — the verification line underneath reports the character count and code point so you can confirm something really is on your clipboard before you paste it. From there, paste it wherever blank text is needed. If the destination appears to swallow it, switch to the Hangul filler or braille blank, which occupy real width and survive validation that rejects empty or whitespace-only input.
Which invisible character works for a blank name in a game or username?
Start with U+3164 HANGUL FILLER. Games and social platforms almost always reject a display name that is empty or whitespace-only, and a zero-width space usually trips that check, but the Hangul filler is classified in Unicode as a letter rather than a space — so it passes the test while still rendering as a blank gap. U+2800 BRAILLE PATTERN BLANK is the standard fallback and behaves much the same way. Two caveats worth knowing: a good number of platforms explicitly prohibit blank display names in their terms of service, and names set this way are sometimes reset by moderation without warning.
Why did my invisible character disappear when I pasted it?
Something between your clipboard and the final display trimmed it. Form handlers routinely trim input and then treat the result as empty; HTML collapses runs of whitespace when rendering a page; many chat applications reject messages containing no visible content; and some clipboard managers normalise whitespace-only content on copy. Zero-width characters are the most fragile of the set because they have no width for anything to preserve. A character with real width — the Hangul filler, the braille blank, or a no-break space — survives considerably more of these checks, so it is the right second attempt.
Can I send a blank message on WhatsApp or Discord?
Usually, though it depends on the app and the version. Copy a braille blank or a Hangul filler, paste it as the entire message, and send. Platforms that validate only against empty or whitespace-only messages tend to accept it, because the character is technically neither. Discord is a useful illustration of why the choice of character matters: it strips leading and trailing whitespace from every message, so a lone zero-width space often fails there while a braille blank goes through. Do bear in mind that sending blank messages repeatedly can be read as spam by automated moderation.
How do I find invisible characters in text?
Paste the text into the Find and remove panel above. Every zero-width character, unusual space, bidirectional control, variation selector and tag character is counted and listed by name and code point, and the reveal view marks the exact position of each one inside your text so you can see which word or value is affected. This is by far the fastest way to explain a string that looks right but refuses to match, a CSS class that will not apply, a CSV column that will not parse, or a credential rejected as invalid — and the cleaned output next to it gives you a corrected version to copy straight back.
What is the difference between a zero-width space and a normal space?
A normal space, U+0020, has width, separates words visibly, and is collapsed by HTML into a single space no matter how many you type. A zero-width space, U+200B, has no width at all: its only job is to mark a point where a line is permitted to break, without putting any visible gap there, which is why it is the standard way to make a very long URL wrap. The consequential difference is classification — a zero-width space is not treated as whitespace by many systems, so a trim will not necessarily remove it and a search for a space will never find it. That is simultaneously what makes it useful here and what makes it such a persistent source of bugs elsewhere.
Are invisible characters safe to use?
They are ordinary Unicode characters and carry no inherent risk, but two situations deserve care. In code, data and identifiers they produce failures that are unusually hard to diagnose, precisely because the cause cannot be seen — so it is worth stripping them before pasting into a terminal, a configuration file, a spreadsheet or a database. And because text can carry them without any visual trace, they are sometimes used to watermark a document so a leaked copy can be traced, or to slip content past a filter that only checks visible characters. Neither is a reason to avoid invisible characters; both are good reasons to scan text you have been given rather than trusting how it looks.