Invisible Unicode Characters: The Complete List

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.

CodepointNameWhat it doesCopy
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.

CodepointNameWhat it doesCopy
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.

CodepointNameWhat it doesCopy
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.

CodepointNameWhat it doesCopy
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.