Invisible Unicode Characters: The Complete List
Want them out of your text instead of reading about them? Use the zero-width space remover, the Claude watermark remover, the JSON cleaner or the Excel cell cleaner or the Word and Docs cleaner.
These characters take up no room, print nothing, and survive copy and paste. Most of them exist for a good reason — telling a browser where a word may break, holding an emoji family together, setting text direction for Arabic. The trouble starts when they travel somewhere they were not meant to be: into a database key, a JSON string, a search box, or text copied out of a chat window.
Every character below is listed with what it actually does and whether deleting it is safe. The copy button puts the character itself on your clipboard, which is handy when you need one to test with.
Always invisible, always safe to delete
These carry no meaning in finished text. Every one of them is removed by default, in both tools on this site.
| Codepoint | Name | What it does | Copy |
|---|---|---|---|
| U+200B | ZERO WIDTH SPACE | Lets a browser break a long word. Invisible, survives copy and paste, and the most common hidden character there is. HTML entity |
|
| U+2060 | WORD JOINER | Stops a line break between two words without drawing anything. HTML entity |
|
| U+00AD | SOFT HYPHEN | Marks where a word may break. Only becomes visible if the line actually breaks there. HTML entity |
|
| U+034F | COMBINING GRAPHEME JOINER | Ties two characters together so they behave as one. HTML entity ͏ |
|
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | A byte order mark at the start of a file. Invisible and unwanted anywhere else. HTML entity |
|
| U+E0001 | LANGUAGE TAG | Part of the tag character block, used to label language inside a string. HTML entity |
|
| U+E0020–U+E007F | TAG CHARACTERS | 96 characters that spell out hidden ASCII text. Used to fingerprint copied output. | range |
| U+E000–U+F8FF | PRIVATE USE AREA | Reserved for private agreements. In copied text it is nearly always tracking or a watermark. | range |
| U+F0000–U+FFFFD | PRIVATE USE PLANE 15 | Same idea as the private use area, one plane up. | range |
| U+100000–U+10FFFD | PRIVATE USE PLANE 16 | The last private use plane. | range |
| U+FFF9–U+FFFB | INTERLINEAR ANNOTATION | Three marks for ruby-style annotation. Rarely intended in plain text. | range |
Invisible, but they carry meaning
Deleting these changes how text renders. They stay unless you turn on aggressive mode.
| Codepoint | Name | What it does | Copy |
|---|---|---|---|
| U+200D | ZERO WIDTH JOINER | Joins characters. This is what holds an emoji family together as one picture. HTML entity |
|
| U+200C | ZERO WIDTH NON-JOINER | Stops a join. Required for correct Persian, Arabic and Devanagari. HTML entity |
|
| U+200E | LEFT-TO-RIGHT MARK | Forces left-to-right direction for the characters after it. HTML entity |
|
| U+200F | RIGHT-TO-LEFT MARK | Forces right-to-left direction for the characters after it. HTML entity |
|
| U+061C | ARABIC LETTER MARK | Bidirectional mark used with Arabic script. HTML entity |
|
| U+202A–U+202E | BIDI EMBEDDING AND OVERRIDE | Five characters that set text direction. Safe to delete only in matched pairs. | range |
| U+2066–U+2069 | BIDI ISOLATES | Four characters that isolate a run from its surroundings. | range |
| U+180B–U+180D | MONGOLIAN FREE VARIATION SELECTORS | Select a glyph shape in Mongolian. | range |
| U+FE00–U+FE0F | VARIATION SELECTORS | Choose a glyph variant. Selector 16 is what keeps an emoji looking like an emoji. | range |
| U+E0100–U+E01EF | VARIATION SELECTOR SUPPLEMENT | More glyph variants, mostly for CJK ideographs. | range |
Spaces that are not the space bar
These look like a space and are not U+0020. They break comparisons and searches. Left alone unless you turn on the spaces option.
| Codepoint | Name | What it does | Copy |
|---|---|---|---|
| U+00A0 | NO-BREAK SPACE | A space that will not break a line. The one people paste by accident most often. HTML entity |
|
| U+202F | NARROW NO-BREAK SPACE | A thin unbreakable space, used before units and currency in French typography. HTML entity |
|
| U+205F | MEDIUM MATHEMATICAL SPACE | A medium space for use inside formulas. HTML entity |
|
| U+3000 | IDEOGRAPHIC SPACE | A full-width space that matches the width of a CJK character. HTML entity |
|
| U+2000–U+200A | FIXED-WIDTH SPACES | Eleven widths from EN QUAD down to HAIR SPACE. | range |
Invisible and deliberately left alone
These two are line and paragraph breaks. They are real structure, not junk, so neither tool removes them.
| Codepoint | Name | What it does | Copy |
|---|---|---|---|
| U+2028 | LINE SEPARATOR | A line break that is not a newline character. It breaks JSON strings and some parsers. HTML entity
|
|
| U+2029 | PARAGRAPH SEPARATOR | A paragraph break that is not a newline character. Same parsing problem. HTML entity
|
Why they end up in ordinary text
Three sources cover almost all of it. Rich text editors insert zero width spaces and no-break spaces as you type, and they come along when you copy. AI chat output carries invisible marks that identify it. And text copied from a web page picks up whatever the page was using for layout.
None of those are visible, which is the whole problem. A string that renders identically to another one can still fail to match it.
How to find them in your text
Paste the text into the zero-width space remover. It marks each hidden character in place, so you see where it sits before anything is deleted, and then removes it. Nothing is uploaded — the scan runs in your browser.
A note on the other side of this
The same characters are also used to hide text in a URL, to smuggle words past a filter, and to fingerprint text so its origin can be traced later. That is worth knowing, because it explains why some of them show up in places they were never typed. This page exists to help you find them and take them out, not to help you hide anything.