Invisible Character Detector

Find hidden Unicode characters, inspect their code points, and review where they occur in the text.

Detect zero-width spaces, unusual whitespace, controls, bidirectional marks, variation selectors, private-use characters and other non-obvious code points.

Your text is processed in this browser and is not submitted to UnicodeNow.

Processed locally in your browser
Detection options

Choose which categories to include in the inspection report. Character position is one-based and counts Unicode code points.

Exact unassigned-character detection is not available in the browser bundle, so this filter is disabled.

Character position is one-based by Unicode code point. UTF-16 offset is zero-based for JavaScript debugging.

Paste text that may contain hidden spaces, controls, bidirectional marks or formatting characters.

This report is used for Copy report and Download report. The structured table below is the primary inspection view.

Inspection report

No detection has run yet.

Detected invisible and special Unicode characters
PositionVisible tokenCode pointUnicode nameCategoryTypeEscaped valueNotes

What this tool detects

The Invisible Character Detector scans Unicode text for zero-width characters, unusual spaces, control characters, bidirectional controls, variation selectors, private-use characters, noncharacters, combining marks and hidden formatting code points. It reports each finding with a visible token, Unicode notation, category, position and a short explanation.

Why invisible characters matter

Hidden Unicode characters may affect equality checks, usernames, database lookups, source code review, search, CSV and JSON processing, line wrapping, filenames, copied commands, emoji rendering and multilingual text. A character can be legitimate in one context and surprising in another, so this tool focuses on inspection rather than automatic removal.

Example

Rendered text:

user​name = admin

Escaped representation:

user\u200Bname\u00A0=\u00A0admin

The exact findings are: one U+200B ZERO WIDTH SPACE between user and name, plus two U+00A0 NO-BREAK SPACE characters around the equals sign.

Understanding positions

Character position is one-based and counts Unicode code points. UTF-16 offset is zero-based and matches JavaScript string indexing. Emoji and other supplementary-plane characters count as one Unicode code point, but they occupy two UTF-16 code units, so later offsets can differ from character positions.

Should I remove detected characters?

Removal depends on context. A zero-width joiner may be required for an emoji sequence or a writing system. A variation selector controls text or emoji presentation. Bidi controls may be legitimate in multilingual text. A non-breaking space may be intentional in layout-sensitive content. Review the report first, then use Invisible Character Remover when you know which categories should be removed.

Technical details

Detection runs locally in JavaScript by iterating Unicode code points with for...of, tracking one-based code-point positions and zero-based UTF-16 offsets, then classifying each code point with built-in ranges and available Unicode property support. Names are provided for well-known hidden characters; otherwise the report uses Name unavailable instead of guessing.

Privacy

Your input remains in this browser. It is not uploaded to UnicodeNow, sent to a processing API, stored in browser storage or added to the URL.

Frequently asked questions

What is an invisible Unicode character?

It is a Unicode code point that has little or no visible shape, such as a zero-width space, control character, non-breaking space or formatting mark.

How do zero-width spaces get into text?

They can come from copied web pages, documents, chat apps, text editors, input methods, intentional formatting or automated cleanup mistakes.

Why can identical-looking strings compare as different?

Two strings can render the same while containing different Unicode code points, hidden controls or special spaces, so exact byte or code-point comparison fails.

Are invisible characters always malicious?

No. Some are required for emoji, writing systems, line breaking or multilingual text. Unexpected ones in identifiers, commands or source code deserve review.

What is the difference between ZWSP, ZWNJ and ZWJ?

ZWSP suggests a zero-width word break, ZWNJ prevents joining in scripts that join letters, and ZWJ requests joining, including in many emoji sequences.

What are bidirectional control characters?

Bidi controls influence visual text order. They are legitimate in mixed-direction text but security-sensitive in source code, filenames and identifiers.

Can removing invisible characters break emoji or languages?

Yes. Removing ZWJ, ZWNJ, variation selectors or bidi marks without context can change emoji rendering or valid language behavior.

How are character positions calculated?

Character position is one-based and counts Unicode code points. UTF-16 offset is zero-based and matches JavaScript string indexing.

What is a non-breaking space?

U+00A0 NO-BREAK SPACE looks similar to an ordinary space but prevents a line break and affects exact matching.

Is my text uploaded or stored?

No. Detection runs in your browser and the input is not submitted to UnicodeNow, stored in browser storage or placed in the URL.

Can I safely remove every detected character?

No. Review the context first. Use the Invisible Character Remover only after deciding which categories are unwanted for your data.

Related tools

Unicode Text Cleaner

Normalize, trim and clean problematic Unicode text safely.

Text CleaningProcessed locally

Whitespace Normalizer

Normalize tabs, special spaces, duplicate spaces and line endings.

Text CleaningProcessed locally

Control Character Remover

Remove control characters while optionally preserving tabs and line breaks.

Text CleaningProcessed locally

Clean Copied PDF Text

Repair common spacing, hyphenation and line-break issues from copied PDF text.

Text CleaningProcessed locally

Unicode Character Inspector

Inspect each Unicode character, encoding, category, script and normalization form.

UnicodeProcessed locally

Unicode Sequence Analyzer

Analyze code points, grapheme clusters, bytes, scripts and directionality.

UnicodeProcessed locally

Unicode Text Compare

Compare strings exactly and after Unicode normalization.

Text ComparisonProcessed locally

Related guides

What Is Unicode?

Unicode is the international standard used to represent text consistently across computers, phones, websites, programming languages and operating systems.