Invisible Character Checker & Unicode Inspector

Inspect, detect, and safely clean zero-width spaces, directional bidi overrides, homoglyphs, and Unicode normalization anomalies. Local browser execution.

Test Interactive Samples

Quick Inject at Cursor:
Drag & Drop text or source file (up to 5MB) or paste content directly
1
Live
Chars: 0 | Graphemes: 0 | Lines: 0

Inspection Hub & Visual Forensics

Live visual inspection, issue reports, security analytics, and normalization analysis.
View Source:
Display Mode:
0 markers

Live visual highlight will appear here as you enter or modify text.

Cleaned Result Preview

Review the cleaned output. You can edit this box manually before copying or exporting.

Not generated yet
No cleaned result generated yet. Click "Remove Hidden" above to produce a sanitized copy.
Export Clean Result: Pending Cleanup
Invisible Chars
0
Zero-Width & Tags
Bidi Controls
0
Overrides & Isolates
Homoglyphs
0
Confusable Lookalikes
Special Spaces
0
NBSP & Quads
Controls (C0/C1)
0
Unsafe Non-Printables
Total Anomalies
0
Flagged Items

Understanding Invisible Characters & Unicode Security

Key Unicode Artifacts

  • Zero-Width Characters. Codepoints like U+200B (Zero-Width Space) and U+2060 (Word Joiner) render without visual width. They can alter string length, raw comparisons, identifiers, parsing, search, or application behavior depending on context.
  • Bidi Directional Overrides. Bidirectional markers (such as U+202E RLO) reorder text rendering in the browser without modifying underlying file storage — the basis of bidirectional text manipulation in source code.
  • Confusable Homoglyphs. Visually lookalike characters across alphabets (like Cyrillic 'а' vs Latin 'a') are frequently weaponized for phishing URLs and spoofed domain impersonation.
  • Non-Breaking Spaces. Web copies frequently inject U+00A0 and Em/En quads which alter automated regex parsing and command line scripts.

Client-Side In-Memory Execution

  • Local Browser Processing. Analysis is performed locally in your browser session; no text is intentionally sent to an external analysis service by the inspection workflow.
  • Safe DOM Rendering. Text is parsed safely through strict DOM text nodes with zero execution of input strings.
  • Contextual Data Preservation. Legitimate Arabic/Hebrew marks, ZWJ emoji sequences, and typographical variation selectors are preserved during safe cleaning.
Instant Secure Local Dark Mode

Unicode Character Architecture & Invisible Text Mechanics

What Are Invisible Characters?

Every digital character is defined by a unique numerical identifier known as a Unicode Code Point (formatted in hexadecimal notation as U+XXXX). While letters like U+0041 ('A') instruct font rendering engines to draw a visible letterform, many standard Unicode code points are designed specifically to convey formatting rules, join adjacent characters, manage bidirectional scripts, or maintain legacy encoding compatibility without producing any visible ink.

These non-rendering codepoints are part of the string's encoded representation, alter string structures, influence search indexing, and participate in raw string comparisons just like standard printable letters. Software processes them unconditionally even when a human viewing the rendered document sees nothing at all.

Invisible Text vs Empty Text

It is vital to distinguish between a truly empty string and a string containing invisible characters:

  • Empty Text (""): Has a length of 0, consumes 0 bytes of payload memory, and contains zero code points.
  • Invisible Text ("\u200B" or "\u3164"): Has a positive character count (> 0), consumes 1 to 4 UTF-8 bytes per character, triggers non-empty validation routines, yet appears completely blank to human eyes.

When comparing two visually identical lines of code, an invisible character will cause raw byte-level comparisons (string1 === string2) to evaluate to false unless explicitly normalized before comparison. You can inspect exact structural differences using our Diff Checker.

Comprehensive Invisible & Blank Character Reference Matrix

The table below details the most common non-rendering, zero-width, and visually blank Unicode characters encountered in source code, copy-pasting, databases, and social platforms.

Character Name Codepoint Decimal Category Behavior & Primary Function Common Real-World Context
Zero Width Space (ZWSP) U+200B 8203 Format (Cf) Allows line breaks without visual space; zero width. Micro-typography, watermarking, copied web snippets
Zero Width Non-Joiner (ZWNJ) U+200C 8204 Format (Cf) Prevents cursive ligature joining between adjacent letters. Persian, Arabic, Devanagari script shaping
Zero Width Joiner (ZWJ) U+200D 8205 Format (Cf) Affects character shaping; glues composite emoji sequences. Emoji modifiers (👨‍💻), Indic conjunct scripts
Word Joiner (WJ) U+2060 8288 Format (Cf) Zero-width character that explicitly prohibits line breaks. Structured markup, non-breaking formatting
Byte Order Mark / ZWNBSP U+FEFF 65279 Format (Cf) Endianness signature at file start; legacy/deprecated zero-width space mid-stream. UTF-8/16 file signatures, accidental string prefixes
Non-Breaking Space (NBSP) U+00A0 160 Separator (Zs) Standard space width; prevents automatic line breaks. HTML documents ( ), rich-text clipboard transfers
Soft Hyphen (SHY) U+00AD 173 Format (Cf) Invisible until a line break splits the word, rendering a hyphen. Justified text, e-books, word processing engines
Hangul Filler U+3164 12644 Letter (Lo) Renders as a full-width blank block; classified as a letter. Invisible usernames, blank bios, social messaging
Braille Pattern Blank U+2800 10240 Symbol (So) Represents a blank 6/8-dot Braille cell without tactile dots. Braille accessibility displays, blank chat messages
Right-to-Left Override (RLO) U+202E 8238 Format (Cf) Forces subsequent characters to render from right to left. Bidi text layout, filename obfuscation, Trojan Source

Blank Character vs Normal Space

Standard space (U+0020) belongs to the general category Separator, Space (Zs). By default, web rendering engines collapse consecutive U+0020 spaces into a single space and trim them from string edges during input sanitization.

In contrast, blank characters like U+3164 (Hangul Filler) or U+2800 (Braille Blank) belong to Letter or Symbol categories. Because they are not categorized as whitespace, standard whitespace-trimming algorithms frequently overlook them, causing them to persist through forms and database columns.

Why Do Spaces Disappear?

Web applications collapse multiple spaces due to standard HTML/CSS whitespace rules (white-space: normal). During submission, backends often invoke routines like trim() or regex patterns like ^\s+|\s+$.

If a user types five standard spaces into a message box, the platform trims them to an empty string and rejects the post. If the user submits a character like U+3164, the backend regex treats it as a non-whitespace character, passing validation while visually rendering empty space.

Unicode Whitespace Family

Unicode standardizes over 17 distinct space characters designed for precision typography. These include:

  • U+2000 / U+2001: En Quad & Em Quad
  • U+2002 / U+2003: En Space & Em Space
  • U+2004..U+2006: Three/Four/Six-Per-Em
  • U+2009 / U+200A: Thin Space & Hair Space
  • U+202F: Narrow No-Break Space
  • U+3000: Ideographic Space (CJK)

Unicode Security, Homoglyphs & Bidi Forensics

Unicode Homoglyphs & Confusables

Homoglyphs are distinct Unicode code points originating from different scripts that share identical or virtually indistinguishable visual representations. For example:

Latin Small Letter 'a': U+0061 (UTF-8: 0x61)
Cyrillic Small Letter 'а': U+0430 (UTF-8: 0xD0 0xB0)

In Internationalized Domain Names (IDNs) and source code identifiers, substituting Latin 'a' with Cyrillic 'а' allows deceptive actors to craft lookalike URLs (pаypal.com vs paypal.com) or shadow internal code variables. Our engine flags confusable characters instantly in the Security Scan tab.

Bidirectional (Bidi) Overrides in Code & Filenames

Unicode supports bidirectional text flow through control markers like U+202E (Right-to-Left Override), U+202D (Left-to-Right Override), and isolate markers (U+2066..U+2069). While designed for legitimate multilingual layout, Bidi controls can invert visual ordering without changing file byte order.

Trojan Source & File Extension Spoofing: A file physically named document[U+202E]cod.exe will render on user screens as documentexe.doc. In source code, Bidi markers can make executable statements appear visually enclosed inside harmless comments.

Why Invisible Characters Break Code, JSON, HTML & Markdown

Python & YAML

Indentation-sensitive languages fail silently when non-breaking spaces (U+00A0) or zero-width spaces are accidentally pasted in place of standard spaces, producing confusing TabError or syntax failures.

JSON & APIs

Invisible characters can make JSON keys unexpectedly different, causing lookups such as obj["id"] to miss the intended key, even though the JSON itself remains syntactically valid.

HTML & DOM

Hidden ZWSP (​) inside tag attributes or URLs corrupts hyperlink destinations and triggers unexpected line wrapping inside inline flex and grid layouts.

Markdown & Docs

Zero-width characters at line starts break Markdown headers (# Title), while soft hyphens (U+00AD) carried over from PDFs corrupt search and copy-paste behavior.

Unicode Normalization Forms (NFC, NFD, NFKC, NFKD)

Understanding Canonical & Compatibility Normalization

Unicode allows certain glyphs to be encoded in multiple valid binary forms. The character 'é' can be represented as a single precomposed code point (U+00E9) or as two decomposed code points (U+0065 Latin Small Letter 'e' + U+0301 Combining Acute Accent). While visually identical, their raw bytes differ completely.

NFC (Canonical Composition)

Decomposes characters canonically, then recomposes them into precomposed code points wherever possible. A common normalization choice when consistent canonical representation is useful.

NFD (Canonical Decomposition)

Separates precomposed characters into their base letters and combining diacritical marks. Used by default in macOS HFS+ file system paths.

NFKC (Compatibility Composition)

Applies compatibility decomposition (folding ligatures like 'ffi' into 'ffi', full-width 'A' into 'A', superscript '²' into '2') followed by canonical composition. Can be useful for search, matching, and identifier processing when compatibility folding is appropriate.

NFKD (Compatibility Decomposition)

Decomposes compatibility variations fully without recomposing. Useful as part of pipelines that decompose compatibility forms before additional transliteration or ASCII-fallback processing.

Characters vs UTF-8/UTF-16 vs Graphemes

Accurate string metrics require understanding how Unicode is stored and rendered:

  • Unicode Code Point: The abstract numerical identifier in Unicode space (e.g., U+1F468).
  • UTF-8 Bytes: Variable-length encoding consuming 1 byte (ASCII), 2 bytes (Latin/Greek), 3 bytes (Asian scripts, BMP), or 4 bytes (Emoji).
  • UTF-16 Code Units: JavaScript strings measure .length in 16-bit code units. Characters above U+FFFF require two surrogate code units.
  • Grapheme Cluster: What a human perceives as a single visible character.

Why One Emoji Contains Multiple Code Points

Consider the technologist emoji sequence: 👨‍💻

1. U+1F468 (Man emoji)
2. U+200D (Zero Width Joiner)
3. U+1F4BB (Personal Computer)

To the user, this is 1 visible grapheme. But in JavaScript, it contains 3 code points, 5 UTF-16 code units, and 11 UTF-8 bytes. Blindly removing zero-width characters breaks the joiner (U+200D), splitting the single emoji into a separate man and laptop: 👨 💻.

Forensic Investigation, Decision Matrices & Safe Cleanup

Character Selection Decision Guide

Different engineering and formatting goals require specific Unicode characters. Use this guide to select the correct code point:

Engineering / Layout Goal Recommended Character Codepoint Behavior & Important Platform Caveats
Zero-width word break opportunity Zero Width Space U+200B Allows line wrap without inserting a hyphen or space. Stripped by some strict comment filters.
Prevent line wrapping between words Non-Breaking Space U+00A0 Has visible standard space width. Do not use if zero horizontal width is required.
Compose custom multi-symbol emoji Zero Width Joiner U+200D Glues compatible glyphs into supported font ligatures. Only renders combined if font supports the sequence.
Prevent cursive letter shaping Zero Width Non-Joiner U+200C Essential for Persian/Arabic prefixes and suffixes. Do not strip from multilingual datasets.
Visible blank block in user interfaces Hangul Filler / Braille Blank U+3164 / U+2800 Renders as blank space; classified as non-whitespace. May appear as an unsupported box on older fonts.

Safe Clean vs Aggressive Clean

Our inspection engine offers two levels of text sanitation:

Safe Clean (Recommended) Removes rogue zero-width spaces (U+200B) and unneeded BOMs while actively preserving valid emoji joiners (U+200D), script non-joiners (U+200C), and typographical spaces.
Remove All Hidden & Unsafe (Aggressive) Strips every zero-width character, variation selector, Bidi directional override, and non-printable control code. Warning: This will break complex emoji and alter Persian/Arabic script presentation.

Safe Unicode Cleanup Checklist

Follow this 8-step auditing procedure before committing sanitized text to production:

  • 1 Paste text or upload file to generate live Findings.
  • 2 Inspect flagged markers in the Visual Highlight tab.
  • 3 Review Security Scan for Bidi overrides and homoglyphs.
  • 4 Verify whether flagged ZWJ/ZWNJ belong to valid emoji or Arabic text.
  • 5 Execute Safe Clean or specialized transformation profile.
  • 6 Review cleaned result preview and edit manually if needed.
  • 7 Save an in-memory Snapshot for rollback comparison.
  • 8 Export cleaned TXT, JSON forensic report, or CSV.

Common Troubleshooting Scenarios

"Text looks identical but equality comparison fails"

Likely caused by an embedded zero-width space (U+200B), byte order mark (U+FEFF), or precomposed vs decomposed normalization differences in un-normalized raw comparisons.

"Emoji sequence split into multiple separate symbols"

Aggressive stripping removed the Zero Width Joiner (U+200D). Use Safe Clean instead to preserve emoji ligatures.

"Cursive Persian or Arabic words disconnected"

The Zero Width Non-Joiner (U+200C) was stripped. Preserve formatting controls when processing Middle Eastern and Indic scripts.

Frequently Asked Questions

What is an invisible character?

An invisible character is a valid Unicode code point that does not render a visible glyph on screen. Unlike an empty string, an invisible character is still part of the string's encoded representation and can affect string length, raw comparisons, and text processing.

What is the difference between invisible text and empty text?

Empty text refers to a string with zero length and zero bytes (""). Invisible text contains one or more Unicode code points (such as U+200B or U+3164) that take up byte storage and satisfy length checks while rendering completely blank to the user.

What is U+200B Zero Width Space?

U+200B is a Unicode format control character designed to indicate a word boundary where a line break may occur without displaying an actual space. It has zero horizontal advance width and is visually imperceptible in standard text rendering.

What is U+200C Zero Width Non-Joiner (ZWNJ)?

U+200C is a formatting character used in complex scripts such as Persian, Arabic, and Indic languages to prevent two adjacent characters from connecting into a single cursive ligature.

What is U+200D Zero Width Joiner (ZWJ)?

U+200D is the Zero Width Joiner (ZWJ), a format character that can affect character shaping and is widely used in emoji sequences to combine characters into a single displayed grapheme.

What is U+FEFF Byte Order Mark (BOM)?

U+FEFF is the Byte Order Mark (BOM), primarily placed at the start of a text stream to signal byte endianness in Unicode encodings. While historically used as a Zero Width No-Break Space when appearing mid-stream, that usage is deprecated in modern Unicode in favor of U+2060 Word Joiner.

What is U+00A0 Non-Breaking Space (NBSP)?

U+00A0 is a whitespace character that displays with the visible width of a normal space but prevents automatic word wrapping and line breaking at its position. It is commonly found in copied web text and HTML documents.

What is U+00AD Soft Hyphen (SHY)?

U+00AD is an invisible formatting character that only renders a visible hyphen if the word containing it must be broken across lines at that exact position.

How does a blank character differ from a standard space (U+0020)?

Standard space (U+0020) is collapsible in HTML, trimmed by standard string routines, and has standard horizontal width. Blank characters like Hangul Filler (U+3164) or Braille Pattern Blank (U+2800) are treated as letters or symbols, avoiding automatic whitespace collapsing and standard trimming algorithms.

Why do invisible characters appear after copying and pasting?

Copied or transformed text can sometimes contain zero-width spaces, soft hyphens, or non-breaking spaces introduced by formatting, document conversion, OCR, editors, or other text-processing systems.

Can invisible characters cause errors in source code?

Yes. Zero-width spaces, non-breaking spaces, or control codes embedded in code files can cause syntax errors, break raw string equality comparisons, create phantom identifiers, and disrupt whitespace-sensitive parsers like Python or YAML.

What are Unicode homoglyphs and confusable characters?

Homoglyphs are distinct Unicode code points from different scripts (like Latin 'a' U+0061 and Cyrillic 'а' U+0430) that share virtually identical visual appearances. Attackers can leverage confusables for domain spoofing and visual impersonation.

What is a Bidirectional (Bidi) control character?

Bidi controls (such as U+202E Right-to-Left Override) are non-printing characters that direct the Unicode Bidirectional Algorithm to switch the visual display direction of text without altering the underlying byte order in storage.

Why can Bidi overrides be dangerous in code review?

Bidi overrides can cause comments and executable code to switch visual positions on screen. A code reviewer might see a benign comment while the compiler executes a completely different logical statement.

What is Unicode Normalization (NFC, NFD, NFKC, NFKD)?

Unicode normalization transforms text into standard canonical forms so that visually equivalent characters (such as precomposed 'é' vs decomposed 'e' + combining accent) share identical binary representations for consistent storage and searching.

What is the difference between NFC and NFD?

NFC (Canonical Composition) combines base characters and diacritical marks into single precomposed characters where available. NFD (Canonical Decomposition) separates precomposed characters into their distinct base letters and combining marks.

Should I remove every zero-width character from my text?

No. Blindly stripping all zero-width characters breaks multi-person emoji sequences (which rely on ZWJ) and destroys legitimate cursive word shaping in scripts like Persian, Arabic, and Hindi (which rely on ZWNJ and ZWJ).

Why did cleaning text break my emoji sequence?

Complex emoji (such as professions, family groups, and skin-tone variations) use Zero Width Joiner (U+200D) and Variation Selectors (U+FE0F). Aggressive cleaning strips these joiners, causing the composite emoji to disintegrate into separate individual symbols.

What is the difference between a Unicode code point and a grapheme cluster?

A code point is an individual numerical index in the Unicode standard (such as U+0061). A grapheme cluster is what a human reader perceives as a single visible character on screen, which may consist of multiple combined code points.

Can an invisible character make a username appear blank?

Certain characters like Hangul Filler (U+3164) or Braille Pattern Blank (U+2800) render as visual whitespace while being recognized as valid non-whitespace characters by some input validation systems. However, many modern platforms now normalize and filter them.

Do invisible characters work universally on every website and app?

No. Every application, operating system, and browser implements its own validation, font rendering, and normalization rules. An invisible character that renders blank on one platform may appear as a missing glyph box (tofu) or be rejected on another.

How does this tool detect hidden characters locally?

Analysis is performed in the browser session; no text is intentionally sent to an external analysis service by the inspection workflow.

Region & Language

Select your preferred language for the interface.