Invisible Unicode characters: code points, names and where they work
Not all blank characters are the same. Some are spaces, some have no width at all, and a few are letters that just happen to look empty, and that decides where each one works.
Short answer: "invisible characters" are a handful of Unicode code points that take up no visible ink. They fall into three groups: spaces (like U+00A0 and U+2003) that have width but are often trimmed, zero-width format characters (like U+200B) that have no width at all, and blank letters and symbols (U+3164 Hangul Filler and U+2800 Braille blank) that look empty but are not treated as whitespace. The last group is what works for blank names and messages.
The three kinds of blank character
1. Space characters
Unicode has more than a dozen space characters in the "space separator" category (Zs): the normal space U+0020, the no-break space U+00A0, a range of typographic spaces from U+2000 to U+200A, the narrow no-break space U+202F and the full-width ideographic space U+3000. They have the White_Space property, so most programming languages remove them when they trim text. In JavaScript, for example, trim() removes every Zs character and U+FEFF. That is why they rarely work for blank usernames, even though they look blank.
2. Zero-width format characters
Characters such as the zero-width space U+200B, the zero-width non-joiner U+200C, the zero-width joiner U+200D and the word joiner U+2060 are in the "format" category (Cf). They are not whitespace, so trim() keeps them, but Unicode marks them as default ignorable: software is allowed to draw them as nothing. They have real jobs. U+200B marks a place where a long word may break, U+200C and U+200D control how letters join in scripts such as Arabic, Persian and Hindi, and U+200D glues emoji into combinations such as family or profession emoji.
Because they are invisible and have zero width, they are popular for spoofing names, so many sites strip or block them.
3. Blank letters and symbols
The Hangul fillers (U+3164, U+115F, U+1160 and the half-width U+FFA0) are letters (category Lo) used internally in Korean text processing. The Braille pattern blank U+2800 is a symbol (So), the Braille cell with no dots raised. Neither group is whitespace, and both are allowed by filters that accept "letters" or "symbols", yet most fonts draw them as an empty gap. The Hangul fillers are also default ignorable, so some systems draw them with zero width or, if the font lacks them, as a box.
Reference table
"Trimmed" means removed by a typical whitespace trim, such as JavaScript's trim(). "Usernames" is the usual result across games and apps; individual apps differ. You can copy every character in this table except U+FFA0 from the invisible character tool.
| Code point | Name | Category | Width | Trimmed? | HTML | Usernames |
|---|---|---|---|---|---|---|
| U+3164 | Hangul Filler | Letter (Lo) | Blank gap | No | ㅤ | Best chance |
| U+115F | Hangul Choseong Filler | Letter (Lo) | Varies by font | No | ᅟ | Often |
| U+1160 | Hangul Jungseong Filler | Letter (Lo) | Varies by font | No | ᅠ | Often |
| U+FFA0 | Halfwidth Hangul Filler | Letter (Lo) | Varies by font | No | ᅠ | Sometimes |
| U+2800 | Braille Pattern Blank | Symbol (So) | Blank gap | No | ⠀ | Usually |
| U+200B | Zero Width Space | Format (Cf) | Zero | No | ​ | Rarely |
| U+200C | Zero Width Non-Joiner | Format (Cf) | Zero | No | ‌ | Rarely |
| U+200D | Zero Width Joiner | Format (Cf) | Zero | No | ‍ | Rarely |
| U+2060 | Word Joiner | Format (Cf) | Zero | No | ⁠ | Rarely |
| U+FEFF | Zero Width No-Break Space (BOM) | Format (Cf) | Zero | Yes, in JavaScript |  | Rarely |
| U+180E | Mongolian Vowel Separator | Format (Cf) | Varies | No (in current engines) | ᠎ | Rarely |
| U+00A0 | No-Break Space | Space (Zs) | Like a space | Yes | | Sometimes, mid-name |
| U+2002 | En Space | Space (Zs) | Half an em | Yes |   | Sometimes, mid-name |
| U+2003 | Em Space | Space (Zs) | One em | Yes |   | Sometimes, mid-name |
| U+2009 | Thin Space | Space (Zs) | Narrow | Yes |   | Sometimes, mid-name |
| U+200A | Hair Space | Space (Zs) | Very narrow | Yes |   | Sometimes, mid-name |
| U+3000 | Ideographic Space | Space (Zs) | Full width | Yes |   | Sometimes, mid-name |
"Mid-name" means the character usually survives between visible characters, where trimming does not reach, but is removed when it is at the start or end, or on its own.
Which one to use for what
| Goal | Use | Why |
|---|---|---|
| Blank username or display name | U+3164, then U+2800 | Not whitespace, accepted as a letter or symbol. See the invisible name guide. |
| Empty chat message | U+3164 or U+2800 | Survives the trim that blocks empty messages. See sending a blank message. |
| Blank line in a bio or caption | U+2800 on its own line | Keeps the line from collapsing, and renders as blank almost everywhere. |
| Keep two words on the same line | U+00A0 | That is exactly what the no-break space is for, in Word, HTML and most editors. |
| Allow a break inside a long URL or word | U+200B | Gives the browser a break opportunity without showing a hyphen. |
| Wider gap in a layout | U+2003 or U+3000 | Fixed, predictable width that is not collapsed in HTML. |
Typing them without copying
- No-break space: Option+Space on a Mac; Alt+0160 on the numeric keypad in Windows; Ctrl+Shift+Space in Microsoft Word.
- In HTML: use the named or numeric reference from the table, for example or ㅤ.
- Any code point in Word on Windows: type the hex code, such as 3164, then press Alt+X to convert it.
- Everywhere else: copy it from the tool page. Phone keyboards have no way to type these directly.
Finding hidden characters in text
Invisible characters also turn up by accident: copied from a web page, a PDF or a chat, they can make a password "wrong", break a spreadsheet formula or stop two identical-looking words from matching. To find them, paste the text into the clipboard tester, which counts invisible characters and lists their code points. In code editors such as VS Code, unusual invisible characters are usually highlighted. Removing them is a find-and-replace on the code point.
Do not use invisible characters in passwords, email addresses or file names. They are hard to retype, may be stripped by one system and kept by another, and can lock you out.
Frequently asked questions
Is U+200B a whitespace character?
No. It was moved out of the space separator category in Unicode 4.0.1 and is now a format character. It does not have the White_Space property, which is why trim() functions keep it.
Why is the Hangul Filler a letter if it is blank?
It was included for compatibility with older Korean character sets, where it fills an empty position in a syllable. Unicode classes it as a letter (Lo) and as default ignorable.
What is the difference between U+3164 and U+FFA0?
U+FFA0 is the half-width form of the same filler. It behaves similarly, but fonts support it less consistently, so U+3164 is the usual choice.
Can invisible characters be detected by apps?
Yes. Any app can check code points, so a blank that works today can be blocked tomorrow. You can check your own text with the clipboard tester.