Updated September 15, 2026
Invisible Unicode characters
These characters can be blank, non-printing, or easy to overlook. Many carry meaningful formatting. Use their code points to identify them; visual appearance alone is unreliable.
Spacing and line breaking
| Code point | Name | Role / removal impact |
|---|---|---|
U+00A0 | NO-BREAK SPACE | A space that prevents an ordinary line break. Deleting it can join words. |
U+202F | NARROW NO-BREAK SPACE | A narrow nonbreaking space. |
U+200B | ZERO WIDTH SPACE | Provides a line-break opportunity without ordinary visible spacing. |
U+2060 | WORD JOINER | Prevents a break at its position; different from an emoji or letter joiner. |
U+00AD | SOFT HYPHEN | Marks a possible intraword break. It may become visible when the line breaks. |
U+2000–U+200A | Quad and space characters | Spaces with different widths or purposes; deletion changes spacing. |
U+0009 / U+000A / U+000D | TAB / LINE FEED / CARRIAGE RETURN | Layout controls used in text and data. Removal can merge columns or lines. |
U+2028 / U+2029 | LINE / PARAGRAPH SEPARATOR | Explicit line and paragraph boundaries. |
Joining, variants, and script information
| Code point | Name | Role / removal impact |
|---|---|---|
U+200C | ZERO WIDTH NON-JOINER | Can prevent letter joining or ligatures. Preserve in meaningful script text. |
U+200D | ZERO WIDTH JOINER | Influences letter joining and connects components of some emoji sequences. |
U+FE0E / U+FE0F | VARIATION SELECTOR-15 / -16 | Request text or emoji presentation in supported sequences. |
U+FE00–U+FE0F; U+E0100–U+E01EF | Variation selectors | Request defined glyph variants. Selectors do not have ordinary standalone glyphs. |
U+034F | COMBINING GRAPHEME JOINER | Blocks canonical reordering of combining marks; it does not join letters like ZWJ. |
U+180E | MONGOLIAN VOWEL SEPARATOR | A script-specific formatting character; preserve unless its role is understood. |
U+E0020–U+E007F | Tag characters and CANCEL TAG | Can form part of emoji tag sequences, including certain flags. |
Writing direction
| Code point | Name | Role / removal impact |
|---|---|---|
U+200E / U+200F / U+061C | LEFT-TO-RIGHT / RIGHT-TO-LEFT / ARABIC LETTER MARK | Direction marks influence mixed-direction layout. |
U+202A–U+202E | Embeddings, overrides, and POP DIRECTIONAL FORMATTING | Set directional formatting scopes or overrides. |
U+2066–U+2069 | Directional isolates and POP DIRECTIONAL ISOLATE | Isolate a text span's direction from surrounding text. |
Byte order mark
| Code point | Name | Role / removal impact |
|---|---|---|
U+FEFF | ZERO WIDTH NO-BREAK SPACE / BOM | At the start of an encoded stream it can be a signature. Inside text it has a legacy no-break role. Pasted text cannot establish the original file's encoding. |
Read an inspector result
The emoji occupies one code point and two UTF-16 code units. Positions count the original text, including marked characters.
Source code points: U+1F600 U+0061 U+200B U+0062
Marked text: 😀a⟦U+200B⟧b
U+200B position: 3 (one-based code points)
UTF-16 offset: 3 (zero-based code units)
Remove U+200B: 😀abReferences
Questions
Are all zero-width characters interchangeable?
No. Zero width space concerns breaks; zero width joiner and non-joiner affect joining. Variation selectors choose variants. Use the code point and context to identify the role.
Are invisible characters always unwanted?
No. They can preserve intended typography, script forms, emoji, and writing direction. Inspection alone is useful; removal should follow a specific need.
Does a code-point position count visible characters?
No. One visible character can contain several code points. The inspector's positions count code points from 1 and its UTF-16 offsets count code units from 0.