Invisible & Space Characters

A guide to invisible Unicode characters and special spaces, including non-breaking spaces, zero-width characters, joiners, directional marks, mathematical operators, soft hyphens, and variation selectors.

What Are Invisible Characters?

Invisible characters are characters that affect text even though they may produce no visible mark of their own. They can control spacing, line breaking, character joining, writing direction, emoji presentation, mathematical interpretation, hyphenation, and other aspects of text processing.

“Invisible character” is a useful descriptive term, but it is not a single formal Unicode category. Characters that appear invisible can belong to several different groups, including spaces, formatting controls, joiners, directional controls, variation selectors, invisible mathematical operators, and other special-purpose characters.

Some invisible characters are completely intentional and essential for correct text rendering. Others appear unexpectedly after copying text between websites, documents, messaging applications, spreadsheets, or source-code editors.

Common Invisible and Special Space Characters

Code pointNameCommon function
U+0020SPACEOrdinary visible-width word space
U+00A0NO-BREAK SPACESpace that normally prevents a line break
U+00ADSOFT HYPHENIndicates a possible hyphenation point and is often invisible otherwise
U+200BZERO WIDTH SPACEProvides a word or line-break opportunity without an ordinary visible space
U+200CZERO WIDTH NON-JOINERDiscourages joining or ligature behavior between surrounding characters
U+200DZERO WIDTH JOINEREncourages particular joining or combined rendering behavior
U+200ELEFT-TO-RIGHT MARKInvisible directional formatting mark
U+200FRIGHT-TO-LEFT MARKInvisible directional formatting mark
U+202FNARROW NO-BREAK SPACENarrow space that normally prevents a line break
U+2060WORD JOINERZero-width character used to prevent a line break between surrounding text
U+2061FUNCTION APPLICATIONInvisible mathematical operator representing function application
U+2062INVISIBLE TIMESInvisible mathematical multiplication operator
U+2063INVISIBLE SEPARATORInvisible separator used in mathematical notation
U+2064INVISIBLE PLUSInvisible mathematical addition operator
U+FE0EVARIATION SELECTOR-15Requests text-style presentation in applicable sequences
U+FE0FVARIATION SELECTOR-16Requests emoji-style presentation in applicable sequences
U+FEFFZERO WIDTH NO-BREAK SPACEPrimarily encountered as a byte order mark at the start of text; legacy word-joining behavior is retained for compatibility

Regular Space vs No-Break Space

An ordinary space and a no-break space usually look the same on screen, but they behave differently.

U+0020 SPACE allows normal line-breaking behavior.

U+00A0 NO-BREAK SPACE, commonly abbreviated NBSP, normally keeps the surrounding text together instead of allowing a line break at that position.

In HTML, the familiar entity   represents a no-break space.

This can explain why a piece of text refuses to wrap where expected even though it appears to contain an ordinary space.

Unicode Has Many Different Space Characters

Not every blank area in Unicode is the same character. Unicode defines several spacing characters with different intended widths or behaviors.

Code pointNameTypical characteristic
U+0020SPACEOrdinary space
U+00A0NO-BREAK SPACEOrdinary-style space with no-break behavior
U+2002EN SPACETypographic space related to an en width
U+2003EM SPACETypographic space related to an em width
U+2007FIGURE SPACESpace associated with the width of tabular digits
U+2008PUNCTUATION SPACESpace associated with narrow punctuation width
U+2009THIN SPACENarrow typographic space
U+200AHAIR SPACEVery narrow typographic space
U+202FNARROW NO-BREAK SPACENarrow spacing with no-break behavior
U+205FMEDIUM MATHEMATICAL SPACESpace intended for mathematical typography
U+3000IDEOGRAPHIC SPACEFull-width space used in East Asian text contexts

The exact visual width of some spaces can depend on the font and rendering system.

Zero Width Space U+200B

The zero width space, abbreviated ZWSP, normally occupies no visible width.

Its main purpose is not to create a visible gap. Instead, it can indicate a place where a word or line break is permitted even though an ordinary space is not displayed.

This is useful in writing systems and text-processing situations where visible spaces are not the normal way to mark word boundaries.

A zero width space can also appear unexpectedly in copied text. Because it cannot normally be seen, users may not understand why two apparently identical strings behave differently.

Word Joiner U+2060

The word joiner, abbreviated WJ, also has no visible width, but its behavior is almost the opposite of a zero width space.

Rather than introducing an additional break opportunity, the word joiner is used to prevent a line break between surrounding characters.

CharacterGeneral line-breaking role
ZERO WIDTH SPACECan provide a break opportunity
WORD JOINERPrevents a break

They are both invisible and zero-width in normal display, but they perform different functions.

Invisible Mathematical Operators

Unicode includes several invisible characters designed specifically to represent mathematical operations that may be implied visually rather than written with an ordinary visible operator.

Code pointNamePurpose
U+2061FUNCTION APPLICATIONIndicates that a function is being applied to an argument
U+2062INVISIBLE TIMESRepresents implied multiplication between adjacent mathematical expressions
U+2063INVISIBLE SEPARATORRepresents an implied separator, such as between mathematical indices or list elements
U+2064INVISIBLE PLUSRepresents implied addition where visual juxtaposition could otherwise be ambiguous

These characters normally produce no visible operator glyph. Their purpose is to preserve mathematical meaning in encoded text even when conventional mathematical typography leaves the operation visually implicit.

For example, ordinary mathematical notation may place two variables next to each other to imply multiplication. An encoded mathematical representation can use INVISIBLE TIMES to record that relationship explicitly without displaying a multiplication sign.

These invisible operators are especially relevant when mathematical text is processed by software, converted between formats, or interpreted by accessibility and mathematical-layout systems.

Zero Width Joiner U+200D

The zero width joiner, or ZWJ, influences how adjacent characters are rendered together.

In scripts with joining or ligature behavior, it can request a joined presentation that might not otherwise occur.

ZWJ is also important in emoji. Some emoji that appear as a single pictograph are actually sequences of multiple characters connected by zero width joiners.

The ZWJ itself is normally invisible. What the user sees is the effect it has on the characters around it.

Zero Width Non-Joiner U+200C

The zero width non-joiner, abbreviated ZWNJ, is used to inhibit joining behavior that might otherwise occur between adjacent characters.

It is particularly important in scripts where letter forms change according to joining context.

ZWJ and ZWNJ should not be confused with ZERO WIDTH SPACE. They affect character joining and shaping rather than simply providing invisible word spacing.

ZWSP vs ZWJ vs ZWNJ

AbbreviationNameMain purpose
ZWSPZero Width SpaceInvisible break opportunity
ZWJZero Width JoinerInfluences joining or combined rendering
ZWNJZero Width Non-JoinerInhibits joining behavior

The similar names can make these characters easy to confuse, but their functions are fundamentally different.

Soft Hyphen U+00AD

The soft hyphen is an unusual character because it is often invisible until a word needs to break at the end of a line.

It marks a potential hyphenation location. If no line break occurs there, many rendering systems display nothing. If the word is broken at that point, a visible hyphen may be shown.

This can make copied text containing soft hyphens difficult to diagnose. A word may appear completely normal while containing an additional hidden character internally.

Directional Marks

Text that mixes left-to-right and right-to-left writing systems sometimes requires invisible characters that help determine directional behavior.

Code pointNameAbbreviation
U+200ELEFT-TO-RIGHT MARKLRM
U+200FRIGHT-TO-LEFT MARKRLM

These characters do not normally create visible marks. Instead, they influence how surrounding bidirectional text is ordered and displayed.

Bidirectional Isolate Characters

Unicode also provides invisible isolate controls for text that mixes left-to-right and right-to-left writing directions.

Code pointNameAbbreviation
U+2066LEFT-TO-RIGHT ISOLATELRI
U+2067RIGHT-TO-LEFT ISOLATERLI
U+2068FIRST STRONG ISOLATEFSI
U+2069POP DIRECTIONAL ISOLATEPDI

These controls help isolate a section of bidirectional text so that its directional behavior does not unexpectedly affect surrounding content.

Like LRM and RLM, these characters normally have no visible glyph of their own. Their effect becomes apparent through the ordering and layout of surrounding text.

Variation Selectors

Some invisible characters modify the presentation of the character immediately before them.

Code pointNameCommon role
U+FE0EVARIATION SELECTOR-15Requests text-style presentation where supported
U+FE0FVARIATION SELECTOR-16Requests emoji-style presentation where supported

The variation selector itself is not intended to appear as an independent visible symbol.

As a result, two strings can appear to contain the same visible character while one actually contains an additional variation selector.

U+FEFF and the Byte Order Mark

U+FEFF has a particularly complicated history.

Its Unicode name is ZERO WIDTH NO-BREAK SPACE. At the beginning of certain Unicode-encoded text streams, it can serve as a byte order mark, commonly called a BOM.

Historically, U+FEFF was also used for zero-width no-break behavior inside text. Modern Unicode provides U+2060 WORD JOINER for new text that needs this word-joining function.

This distinction matters because an unexpected U+FEFF at the beginning or inside a file may be related to encoding or legacy processing rather than ordinary spacing.

Why Invisible Characters Appear Unexpectedly

Hidden characters can enter text in many ordinary ways:

  • copying from a website;
  • copying from PDF or word-processing software;
  • pasting formatted text into a plain-text field;
  • using non-breaking spaces inserted automatically by an editor;
  • working with multilingual or bidirectional text;
  • copying emoji sequences;
  • importing data from spreadsheets or databases;
  • automatic hyphenation;
  • text normalization and conversion between systems.

The presence of an invisible character does not automatically indicate corrupted or malicious text.

Why Two Identical-Looking Strings Can Be Different

Consider two strings that appear visually identical:

AB

AB

One could contain only the visible letters A and B, while another could contain an invisible character between them.

This difference may affect:

  • search results;
  • string comparison;
  • usernames;
  • filenames;
  • passwords;
  • database matching;
  • source code;
  • URLs;
  • line wrapping;
  • text rendering.

Visual inspection alone cannot reliably detect these differences.

Invisible Characters in Emoji Sequences

Some emoji are not single Unicode characters. They are sequences containing multiple emoji or symbol characters combined with invisible formatting characters such as ZERO WIDTH JOINER.

A family, profession, relationship, or other composite emoji may therefore contain several encoded characters even though the screen displays a single visual image.

Deleting one component of the sequence can cause the visual result to change substantially.

Invisible Characters and Security

Invisible and directional characters have legitimate purposes, but they can also create confusing text when inserted where users do not expect them.

For example, hidden characters may cause identifiers to differ while appearing similar, or directional controls may change the visual ordering of text.

Software handling identifiers, source code, security-sensitive values, or user input may therefore need to inspect Unicode code points rather than relying only on what is visibly displayed.

How to Find an Invisible Character

If text behaves unexpectedly, inspect it using a Unicode-aware tool that can display individual code points or reveal whitespace and formatting marks.

Useful clues include:

  • the cursor requiring an extra key press to cross an apparently empty location;
  • unexpected line wrapping;
  • search failing to match apparently identical text;
  • different character counts for visually identical strings;
  • text changing when pasted into another editor;
  • emoji changing when characters are deleted one at a time.

Identifying the exact code point is more reliable than trying to determine an invisible character from appearance alone.

Invisible Does Not Mean Empty

An invisible Unicode character is still data.

Even when it has no visible glyph, it may participate in text layout, rendering, searching, sorting, comparison, cursor movement, mathematical interpretation, or encoding.

This is the most important distinction to remember: an apparently blank location in text may contain nothing, an ordinary space, a special space, or one or more invisible formatting characters.

No published symbol guides are assigned to this category yet.