The Complete List of Invisible Unicode Characters
Every character that renders as nothing — zero-width characters, format controls, invisible operators and exotic spaces — with code points, origins and the bugs each one causes. Test any text with the detector.
Zero-width characters
The classic troublemakers: characters with no width at all, invisible in every font.
| Code point | Name | Legitimate use | How it causes trouble |
|---|---|---|---|
U+200B | Zero-width space | Invisible line-break opportunity | The #1 text watermark; breaks string comparison, search, parsing |
U+200C | Zero-width non-joiner | Prevents ligatures; required in Persian | Used in steganography; invisible in usernames |
U+200D | Zero-width joiner | Builds emoji sequences (👨👩👧) | Hidden payload carrier between ordinary letters |
U+2060 | Word joiner | No-break glue without width | Same invisibility, rarely legitimate in web text |
U+FEFF | Zero-width no-break space (BOM) | Byte-order mark at file start | Sneaks into copied text; breaks JSON/CSV parsers |
U+180E | Mongolian vowel separator | Mongolian script | Zero-width in most renderers |
Format & directional controls
| Code point | Name | Notes |
|---|---|---|
U+00AD | Soft hyphen | Invisible until a line breaks there; survives copy-paste from PDFs |
U+200E / U+200F | Left-to-right / right-to-left mark | Bidi control; rides along when copying from mixed-direction text |
U+202A–U+202E | Directional embeddings & overrides | U+202E ("RLO") is infamous for filename spoofing attacks |
U+2066–U+2069 | Directional isolates | Modern bidi controls, equally invisible |
U+061C | Arabic letter mark | Bidi control for Arabic-script digits |
U+034F | Combining grapheme joiner | Invisible combining mark, a favorite for evading text filters |
U+2061–U+2064 | Invisible math operators | Function application, invisible times/separator/plus |
U+FFF9–U+FFFB | Interlinear annotation characters | Ruby-text markup, invisible elsewhere |
Invisible "letters" and fillers
| Code point | Name | Notes |
|---|---|---|
U+115F / U+1160 | Hangul choseong / jungseong filler | Render as blank; used to make "empty" usernames |
U+3164 | Hangul filler | The famous "ㅤ" blank character in gamer tags |
U+FFA0 | Halfwidth Hangul filler | Same trick, halfwidth form |
U+17B4 / U+17B5 | Khmer inherent vowels | Deprecated, invisible |
Variation selectors and tags — the watermark blocks
These two ranges deserve special attention because they can encode arbitrary hidden data:
| Range | Name | Why it matters |
|---|---|---|
U+FE00–U+FE0F | Variation selectors 1–16 | VS15/16 legitimately switch emoji presentation (❤︎ vs ❤️); the rest are invisible modifiers that can tag text |
U+E0100–U+E01EF | Variation selectors supplement | 240 more invisible modifiers — enough to encode a byte per character |
U+E0000–U+E007F | Unicode tag characters | A full invisible copy of ASCII. Entire sentences can hide inside a single visible emoji — used in prompt-injection demos and AI text watermarking experiments |
Spaces that aren't the space you think
Not strictly invisible — they occupy width — but indistinguishable from a normal space by eye:
| Code point | Name | Notes |
|---|---|---|
U+00A0 | No-break space | Everywhere in HTML ( ) and word processors |
U+202F | Narrow no-break space | Repeatedly observed in ChatGPT output; a strong AI tell |
U+2000–U+200A | En quad … hair space | Eleven typographic spaces of varying widths |
U+205F | Medium mathematical space | Math typesetting |
U+1680 | Ogham space mark | Renders as a line in Ogham font contexts |
U+3000 | Ideographic space | Full-width CJK space |
U+2028 / U+2029 | Line / paragraph separator | Break JavaScript string literals and JSON in old parsers |
How to find them in your text
You can't see them, but software can. Paste any text into our free invisible character detector — it checks all 400+ code points above, lists what it finds by name and count, and can remove everything in one click while preserving emoji and legitimate script joiners. Everything runs locally in your browser.