Guide

Default-Ignorable Unicode Characters: What Does “Ignorable” Actually Mean?

Unicode has a property with a name that’s easy to misread: Default_Ignorable_Code_Point.

It sounds like “these characters don’t matter.” That isn’t what Unicode means.

Default-ignorable code points are mostly special-use characters that normally shouldn’t turn into a visible missing-glyph box when an implementation doesn’t support their function. Many can still affect shaping, direction, presentation, line breaking, identifiers, or mathematical meaning.

What Does Default-Ignorable Actually Mean?

When software encounters an unsupported ordinary character, it may display a fallback glyph such as a box.

That fallback is often wrong for format controls and variation selectors. They don’t have independent visible glyphs in normal text; their job is to affect something else.

The Default_Ignorable_Code_Point property identifies characters that should normally be ignored for fallback display rather than rendered as an unknown visible symbol.

It’s mainly a display-fallback property—not a “safe to erase” label.

Default-Ignorable Does Not Mean “Delete This”

This is the most important distinction.

A code point can be invisible in fallback rendering and still carry useful information.

For example:

  • ZWJ can affect joining and emoji sequences;
  • ZWNJ can prevent joining where that distinction matters;
  • variation selectors can request a particular presentation;
  • bidi controls can affect visual ordering;
  • WORD JOINER can affect line breaking;
  • invisible mathematical operators can encode mathematical semantics.

Deleting all of them just because they’re invisible can change valid text.

What Kinds of Characters Are Default-Ignorable?

Unicode’s default-ignorable set includes almost all format characters, all variation selectors, and some other special-purpose characters.

Code pointNamePossible role
U+00ADSOFT HYPHENOptional intraword break
U+200BZERO WIDTH SPACEInvisible break opportunity
U+200CZERO WIDTH NON-JOINERJoining control
U+200DZERO WIDTH JOINERJoining and emoji sequences
U+200E / U+200FLRM / RLMBidirectional ordering
U+2060WORD JOINERLine-breaking control
U+2061–U+2064Invisible mathematical operatorsMathematical semantics
U+FE0E / U+FE0FVS15 / VS16Text or emoji presentation request

They all fit within the wider topic of invisible and special space characters, but they don’t share one common function.

Are All Invisible Characters Default-Ignorable?

No.

Blank-looking space characters such as NBSP and NNBSP are Unicode White_Space characters, but they don’t have the Default_Ignorable_Code_Point property.

So “I can’t see a glyph” and “Unicode marks this as default-ignorable” are two different ideas.

Why Are Variation Selectors Default-Ignorable?

A variation selector normally has no glyph of its own. Its job is to affect the display of an eligible preceding character.

If the variation sequence is unsupported, Unicode says the base character should be displayed as usual and the selector should normally remain invisible.

That’s exactly the kind of fallback behavior this property is meant to support. Variation Selector-15 vs Variation Selector-16: Text or Emoji Presentation? looks specifically at the emoji text/emoji presentation pair.

Why Are ZWJ and ZWNJ a Good Example?

ZWJ and ZWNJ show why “ignorable” can’t be read as “unimportant.”

They can affect joining behavior in writing systems that use them, and ZWJ is also part of defined emoji sequences.

Removing one can visibly change the output even though the control itself was never drawn as a standalone glyph.

What Happens in Identifiers?

Identifiers need stricter rules than ordinary prose because hidden format characters can create values that look the same while remaining different encoded strings.

UAX #31 provides a standard profile that excludes default-ignorable code points from general-purpose default identifiers, and UTS #39’s General Security Profile marks them as restricted.

That includes ZWJ and ZWNJ by default. Unicode also recognizes that joining controls are needed for the correct visual form of common words in some languages, so systems that deliberately allow them should use documented, context-sensitive restrictions rather than accepting them everywhere.

That’s an identifier policy. It isn’t a command to strip the same characters from ordinary prose—and it’s more precise than either “always allow them” or “always delete them.”

What About Search and Comparison?

Whether a default-ignorable difference matters depends on the comparison being performed.

For example, Unicode’s identifier caseless matching model uses a transformation that removes Default_Ignorable_Code_Point characters as part of toNFKC_Casefold.

A forensic or debugging comparison may need the opposite behavior: preserve every code point so you can see exactly why two strings differ.

Why Invisible Unicode Characters Can Break Search and String Matching separates those two questions: what characters are encoded, and what the application chooses to treat as equal.

Does NFC Remove Default-Ignorable Characters?

No. NFC is canonical normalization, not an invisible-character cleanup filter.

Identifier-specific transformations can do additional work, but that’s a separate matching policy and shouldn’t be confused with ordinary normalization of prose.

What Does “Ignored for Display” Mean?

It means that when an implementation can’t support the character’s intended function, the normal fallback is often to avoid showing a random missing-glyph symbol for that control.

For example, an unsupported variation selector normally stays invisible while the base character is displayed.

The code point is still in the data. It hasn’t been deleted.

Can a Default-Ignorable Character Still Change What You See?

Absolutely. The control itself can be invisible while its effect is visible somewhere else.

  • ZWJ can change an emoji sequence.
  • ZWNJ can change joining behavior.
  • VS16 can request emoji presentation.
  • A bidi control can change visual ordering.
  • SHY can affect a word when it wraps.
  • WORD JOINER can stop a line break.

Invisible input can have visible consequences.

Should a Cleanup Tool Remove Default-Ignorable Characters?

Not as a universal rule.

A security-focused username profile may intentionally exclude them. A multilingual editor may need to preserve some of them. An emoji-aware application needs controls that would make no sense in a simple ASCII-style identifier.

The policy has to match the text and the product.

How to Find and Remove Invisible Unicode Characters Without Breaking Text follows that approach: identify the code point first, understand its job, then decide whether the destination needs it.

Why Does the Property Include Reserved Ranges?

Unicode also gives the default-ignorable property to certain reserved ranges intended for future format and special-use characters.

That gives older implementations a sensible fallback when they encounter a future formatting character they don’t understand: don’t suddenly show a missing-glyph box in normal text.

It’s part of Unicode’s forward-compatibility strategy as well as a property of already assigned controls.

The Main Point

Default_Ignorable_Code_Point doesn’t mean “meaningless,” “empty,” or “safe to delete.”

It mainly tells implementations how special-purpose characters should behave in fallback display when their function isn’t supported.

Many of those characters still carry real information about shaping, direction, presentation, line breaking, identifiers, or mathematical meaning.

If you find one in text, don’t ask only “can I see it?” Ask what job that code point is doing there.

Leave a Comment