Skip to main content
I
Uni
UNICODE
Character Anatomy & Forensics

Zero-Width Spaces & Invisible Characters: Forensic Breakdown

Raja Ahmad & Security Team•Updated October 2026•6 min read

1. What Are Invisible Characters?

When most people think of a character, they imagine a visible letter glyph like 'A' or a punctuation symbol like '!'. However, the Unicode standard contains dozens of codepoints designed to carry syntactic, structural, or typographic instructions without drawing any physical ink on screen.

These characters occupy 0 pixels of horizontal advance width. When rendered between two regular letters, the eye perceives no gap, yet the underlying byte stream contains distinct codepoints.

2. The Core Invisible Characters in Unicode 16.0

CodepointOfficial NamePrimary Purpose
U+200BZero Width Space (ZWSP)Permits line wrap without inserting a visible hyphen or space.
U+200CZero Width Non-Joiner (ZWNJ)Prevents two adjacent cursive characters from forming a ligature.
U+200DZero Width Joiner (ZWJ)Forces cursive joining; binds multiple emojis into composite glyphs.
U+FEFFByte Order Mark (BOM) / ZWNBSPSignals endianness in UTF-16; historically used as non-break space.
U+2060Word Joiner (WJ)Strictly prevents line breaking at that point without width.
U+2800Braille Pattern BlankA dedicated blank cell in the Braille alphabet (often used for blank bios).

3. Legitimate Typography and Script Requirements

Invisible characters were not engineered for stealth or evasion; they are essential for world languages:

Persian and Urdu Morphology (ZWNJ)

In Persian (Farsi), prefixes like "mi-" (می) attach to verbs without forming a cursive connection with the next root letter:

Correct with ZWNJ: می‌خواهم (U+0645 U+06CC U+200C U+062E...)

Broken without ZWNJ: میخواهم (Letters erroneously ligature together)

Emoji Modifiers and Families (ZWJ)

When you see an emoji like 👨‍👩‍👧‍👦 (Family: Man, Woman, Girl, Boy), the browser is actually rendering four distinct individual emojis glued together by three ZWJ characters:

👨 (U+1F468) + [ZWJ U+200D] + 👩 (U+1F469) + [ZWJ U+200D] + 👧 (U+1F467) + [ZWJ U+200D] + 👦 (U+1F466)

4. Digital Forensics: Text Steganography & Watermarking

Because invisible characters cannot be seen by the naked human eye, cybersecurity engineers and data loss prevention (DLP) systems use them for invisible text watermarking.

Any binary byte stream can be encoded using binary states:

  • Zero bit (0) = U+200B (Zero Width Space)
  • One bit (1) = U+200C (Zero Width Non-Joiner)

A secret user ID (e.g., USER_9281) can be converted to 64 binary bits and silently injected between words of a confidential document. When an insider copies the text to an unauthorized forum or leaks it, a simple string hex dump reveals the traitorous user ID immediately.

How to Defend Against Invisible Injections

Always scrub untrusted user inputs before saving them to databases. A simple regex such as /[\u200B-\u200D\uFEFF]/g strips zero-width anomalies without harming visible text.

Suspect hidden characters in your text?

Scan, detect, and copy invisible codepoints with our Invisible Characters tool.

Open Invisible Inspector