Skip to content
Ghostchars

Hidden character index

Every codepoint with a page of its own: what it is for, where it comes from, when it is doing a real job, and whether the default pass removes it.

48 characters documented

Grouped by the category the engine reports. Within a category, the option that removes a character is the same for every row.

Zero-width and invisible

Governed by Default pass (always on)

CodepointNameDefault pass
U+200BZERO WIDTH SPACEA space with no width. It takes up a position in the string, marks a place where a line may break, and draws nothing at all.Yes
U+2060WORD JOINERThe opposite of a zero width space: an invisible character that forbids a line break at its position, without adding any width.Yes
U+00ADSOFT HYPHENA conditional hyphen. It is invisible until the line breaks at that exact spot, at which point a hyphen appears.Yes
U+FEFFZERO WIDTH NO-BREAK SPACEThe byte order mark. At the very start of a file it announces the encoding; anywhere else it is an invisible, non-breaking nothing that Unicode has deprecated for that use since 3.2.Yes
U+2061FUNCTION APPLICATIONAn invisible mathematical operator meaning "apply this function to this argument" — the silent operator between f and (x).Yes
U+2062INVISIBLE TIMESThe invisible multiplication sign — the operator that is meant when you write "2x" and mean "2 times x".Yes
U+2063INVISIBLE SEPARATORThe invisible comma: the separator between the indices in a subscript like a⁣i⁣j.Yes
U+2064INVISIBLE PLUSThe invisible addition sign used between the parts of a mixed fraction — the "and" in "one and a half".Yes
U+034FCOMBINING GRAPHEME JOINERA zero-width combining mark that exists to change how two characters sort and collate, not how they look. It never renders.Yes
U+180EMONGOLIAN VOWEL SEPARATORA Mongolian orthographic control that was reclassified in Unicode 6.3: it used to be a space, and is now a zero-width format character.Yes
U+2800BRAILLE PATTERN BLANKThe braille cell with no dots raised. It is a printing character with a real advance width, but nothing is drawn.Yes
U+3164HANGUL FILLERA Hangul compatibility character with no shape, used historically to fill an empty slot in a Korean syllable block.Yes
U+FDD0–U+FDEFNONCHARACTERSCodepoints Unicode has permanently reserved to never be characters: U+FDD0–U+FDEF plus the last two codepoints of every plane (U+FFFE, U+FFFF, U+1FFFE, and so on).Yes

Bidirectional overrides

Governed by Default pass (always on)

CodepointNameDefault pass
U+202ERIGHT-TO-LEFT OVERRIDEAn invisible control that forces every following character to be laid out right to left, regardless of what script it belongs to.Yes
U+202DLEFT-TO-RIGHT OVERRIDEThe mirror of U+202E: it forces everything after it to be laid out left to right, overriding the natural direction of Hebrew or Arabic.Yes
U+202ALEFT-TO-RIGHT EMBEDDINGOpens a left-to-right run inside surrounding text, until a matching POP DIRECTIONAL FORMATTING closes it.Yes
U+202BRIGHT-TO-LEFT EMBEDDINGOpens a right-to-left run inside surrounding text, until a matching POP DIRECTIONAL FORMATTING closes it.Yes
U+202CPOP DIRECTIONAL FORMATTINGCloses the most recent embedding or override. On its own it does nothing; paired, it ends a directional run.Yes

Bidirectional marks

Governed by Bidi marks --bidi

CodepointNameDefault pass
U+200ELEFT-TO-RIGHT MARKAn invisible, zero-width character with strong left-to-right direction. It resolves ambiguity in mixed text without reordering anything itself.When free-floating
U+200FRIGHT-TO-LEFT MARKThe mirror of U+200E: an invisible character with strong right-to-left direction, used to resolve ambiguity in mixed-direction text.When free-floating
U+061CARABIC LETTER MARKAn invisible mark with the direction of an Arabic letter, added in Unicode 6.3 for cases where a right-to-left mark is not quite strong enough.When free-floating
U+2066–U+2069BIDIRECTIONAL ISOLATESFour invisible controls — LRI, RLI, FSI and PDI — that wrap a span of text so its direction cannot leak into the text around it. They are the modern replacement for the embedding and override controls.When free-floating

Joiners, selectors and fillers

Governed by Aggressive -a

CodepointNameDefault pass
U+200DZERO WIDTH JOINERAn invisible character that asks two neighbours to be drawn as one. It is what turns three separate people into a family emoji and what joins Arabic and Indic letters that would otherwise stand apart.When free-floating
U+200CZERO WIDTH NON-JOINERThe opposite of the joiner: an invisible character that forbids two neighbours from being drawn as one connected form.When free-floating
U+FE00–U+FE0FVARIATION SELECTORSSixteen invisible modifiers that pick which of several forms the preceding character should take. VS15 (U+FE0E) asks for the black-and-white text form; VS16 (U+FE0F) asks for the colour emoji form.When free-floating
U+E0000–U+E007FTAG CHARACTERSA shadow copy of ASCII. U+E0020–U+E007E mirror the printable ASCII characters, one for one, and render as nothing. U+E007F CANCEL TAG ends a sequence.When free-floating
U+180B–U+180DMONGOLIAN FREE VARIATION SELECTORSThree invisible selectors (FVS1–FVS3) that pick which positional form a Mongolian letter takes when the default shaping is not the one the word needs.When free-floating
U+17B4–U+17B5KHMER INHERENT VOWELSTwo invisible Khmer vowel signs, AQ and AA, which spell out a vowel that is normally implied rather than written.When free-floating
U+115F–U+1160HANGUL JAMO FILLERSTwo zero-width fillers that stand in for a missing initial consonant or medial vowel when a Korean syllable block is written out in jamo.When free-floating

Private-use characters

Governed by Private-use characters --pua

CodepointNameDefault pass
U+E000–U+F8FFPRIVATE USE AREACodepoints Unicode will never assign a meaning to, reserved for private agreements between a font and the software that uses it. U+E000–U+F8FF plus two large supplementary planes.No

Exotic spaces

Governed by Spaces -s

CodepointNameDefault pass
U+00A0NO-BREAK SPACEA space that forbids a line break. It looks exactly like a normal space and is a completely different codepoint.No
U+202FNARROW NO-BREAK SPACEA thinner no-break space, about half the width of a normal one, used where a full space would look too wide.No
U+205FMEDIUM MATHEMATICAL SPACEA space four eighteenths of an em wide, defined for mathematical typesetting — the gap around a binary operator.No
U+3000IDEOGRAPHIC SPACEA full-width space, exactly as wide as a CJK character. It is the space key on a Japanese, Chinese or Korean input method in full-width mode.No
U+1680OGHAM SPACE MARKThe word separator of the Ogham script. Unusually for a space, it is drawn — as a short line — in most Ogham fonts, and as blank in everything else.No
U+2000–U+200AGENERAL PUNCTUATION SPACESEleven typographic spaces of fixed width: en quad, em quad, en space, em space, three-per-em, four-per-em, six-per-em, figure space, punctuation space, thin space and hair space.No

Line separators

Governed by Line endings -n

CodepointNameDefault pass
U+2028LINE SEPARATORUnicode’s own "new line here" character, distinct from the ASCII line feed. It ends a line without ending a paragraph.No
U+2029PARAGRAPH SEPARATORUnicode’s paragraph break — the counterpart of U+2028, one level up.No
U+0085NEXT LINENEL, a C1 control that means "start a new line". It comes from EBCDIC, where it was the newline character.No

Control characters

Governed by Control characters --controls

CodepointNameDefault pass
U+0000–U+001FC0 CONTROL CHARACTERSThe 32 ASCII control codes — NUL, BEL, ESC, the file and record separators, and the rest. They are commands to a teletype, not text.No
U+0080–U+009FC1 CONTROL CHARACTERSA second block of 32 control codes inherited from ISO 8859. In Unicode they are controls; in Windows-1252 the same byte values are curly quotes, the em dash and the euro sign.No

Typographic punctuation

Governed by Punctuation --punct

CodepointNameDefault pass
U+2014EM DASHThe long dash, one em wide, used to set off a parenthetical clause — like this one — or to mark an interruption.No
U+2019RIGHT SINGLE QUOTATION MARKThe curly closing single quote — and, in English, the correct apostrophe: don’t, it’s, ’90s.No
U+2026HORIZONTAL ELLIPSISThree dots in a single character, with tighter spacing than three periods and no chance of a line break inside it.No

Lookalike letters

Governed by Lookalike letters --confusables

CodepointNameDefault pass
U+0430CYRILLIC SMALL LETTER AThe Cyrillic letter a. In almost every font it is drawn identically to the Latin letter a, and it is a completely different codepoint.No
U+043ECYRILLIC SMALL LETTER OThe Cyrillic letter o, drawn identically to Latin o in every font in common use.No
U+0435CYRILLIC SMALL LETTER IEThe Cyrillic letter ie, drawn exactly like a Latin e.No
U+0441CYRILLIC SMALL LETTER ESThe Cyrillic letter es, drawn exactly like a Latin c.No

See the full reference, with the options that govern each category