Zero-Width & Invisible Characters

Not all Unicode characters have visible glyphs. This page catalogs the characters that affect text rendering, layout, and direction without rendering any visible mark themselves. They are the most common source of subtle bugs: string comparisons that fail, lengths that don't match, copy-paste that silently inserts hidden characters, and bidirectional text that renders incorrectly.

Each entry below links to the character's full detail page where you can see its UTF-8 bytes, HTML entity, JavaScript escape, and other encoding formats — useful for detecting and removing these characters from user input.

Complete Reference

Codepoint Name
U+0009 <control>
U+00A0 No-break Space
U+00AD Soft Hyphen
U+034F Combining Grapheme Joiner
U+061C Arabic Letter Mark
U+115F Hangul Choseong Filler
U+1160 Hangul Jungseong Filler
U+17B4 Khmer Vowel Inherent Aq
U+17B5 Khmer Vowel Inherent Aa
U+180B Mongolian Free Variation Selector One
U+180C Mongolian Free Variation Selector Two
U+180D Mongolian Free Variation Selector Three
U+180E Mongolian Vowel Separator
U+2000 En Quad
U+2001 Em Quad
U+2002 En Space
U+2003 Em Space
U+2004 Three-per-em Space
U+2005 Four-per-em Space
U+2006 Six-per-em Space
U+2007 Figure Space
U+2008 Punctuation Space
U+2009 Thin Space
U+200A Hair Space
U+200B Zero Width Space
U+200C Zero Width Non-joiner
U+200D Zero Width Joiner
U+200E Left-to-right Mark
U+200F Right-to-left Mark
U+202A Left-to-right Embedding
U+202B Right-to-left Embedding
U+202C Pop Directional Formatting
U+202D Left-to-right Override
U+202E Right-to-left Override
U+202F Narrow No-break Space
U+205F Medium Mathematical Space
U+2060 Word Joiner
U+2061 Function Application
U+2062 Invisible Times
U+2063 Invisible Separator
U+2064 Invisible Plus
U+206A Inhibit Symmetric Swapping
U+206B Activate Symmetric Swapping
U+206C Inhibit Arabic Form Shaping
U+206D Activate Arabic Form Shaping
U+206E National Digit Shapes
U+206F Nominal Digit Shapes
U+3000 Ideographic Space
U+FEFF Zero Width No-break Space
U+FFA0 Halfwidth Hangul Filler
U+1D159 Musical Symbol Null Notehead
U+1D173 Musical Symbol Begin Beam

Detecting Hidden Characters

To strip zero-width characters from user input in JavaScript:

// Remove the most common invisible characters
str.replace(/[\u200B-\u200D\uFEFF\u00AD\u2060]/g, '')

In Python:

import unicodedata
''.join(c for c in text if unicodedata.category(c) not in ('Cf', 'Zs') or c == ' ')