Local Unicode compatibility tool

Invisible character checker

Find supported hidden characters, review their context, and remove only what you choose. Your text and results stay in this browser.

Task

Options

0 / 200,000 UTF-16 units · 0 code points · 0 lines

Text, results, and context stay in this browser. Copy only happens when you choose it.

Three cleanup examples you can check

Copy the actual input text into Inspect above and run a scan, then open Clean to review it. The visible escape lines spell out hidden characters: \u200B means one U+200B character, not six characters to type. These are constructed examples of the tool’s behavior.

Remove an unwanted separator from a copied identifier

Suppose a copied account ID should be account_id, but exact matching fails.

Actual input text to copy
account​_id
Input with visible escapes
account\u200B_id
Output after the chosen change
account_id
Output with visible escapes
account_id
Inspect finds
One U+200B ZERO WIDTH SPACE after account (code-point position 8).
Preset default
Prose suggests removal. International text asks for review because a word-break hint can be intentional.
Your action
In Clean, choose Prose and Review cleanup. Check that only this occurrence is selected, then Apply 1 selected change.

The result exactly matches account_id. No other characters change; this does not validate the ID in another system.

Replace a no-break space only when ordinary spacing is intended

Suppose a project label must match Project Atlas with an ordinary space.

Actual input text to copy
Project Atlas
Input with visible escapes
Project\u00A0Atlas
Output after the chosen change
Project Atlas
Output with visible escapes
Project\u0020Atlas
Inspect finds
One U+00A0 NO-BREAK SPACE between the words (code-point position 8).
Preset default
All three presets ask for review and leave it unselected. A no-break space can be intentional typography.
Your action
In Clean, Review cleanup, select Replace with ordinary space for this occurrence, then apply the change and confirm the warning.

U+00A0 becomes one U+0020 SPACE. The words stay separated, and the no-break behavior is lost; the space is not deleted.

Clean a stray separator while keeping a family emoji together

A message contains an unwanted separator in Hello and an intentional family emoji.

Actual input text to copy
Hel​lo 👩‍👩‍👧‍👦
Input with visible escapes
Hel\u200Blo 👩\u200D👩\u200D👧\u200D👦
Output after the chosen change
Hello 👩‍👩‍👧‍👦
Output with visible escapes
Hello 👩\u200D👩\u200D👧\u200D👦
Inspect finds
Two findings: one U+200B and one atomic emoji sequence containing three U+200D ZERO WIDTH JOINER characters.
Preset default
Prose selects the U+200B for removal and protects the emoji sequence, leaving it unselected.
Your action
In Clean, choose Prose and Review cleanup. Leave the emoji sequence unselected and Apply 1 selected change.

Only the U+200B is removed. All three joiners remain in the output, preserving the family sequence; its appearance depends on the device and font.

A finding is a reason to check context, not proof that text is unsafe or AI-generated. For more contexts and the full preset comparison, read the zero-width character safe-removal guide.

Inspect first · change only what you choose

Find hidden characters before removing them

Paste text into Inspect to check for supported invisible characters, including zero-width spaces. See what was found and why it may matter, then use Clean to remove only selected findings. Checking does not change your text, and hidden Unicode is not automatically unsafe.

Inspect

Find the character’s name and location, see it in context, and check whether it is suggested for removal or protected by default.

Safe Clean

Choose the findings you want to remove, review the changes, then copy the cleaned text. Undo is available for the last cleanup.

Check text copied from an AI tool

Mark and Extract Lite

Add a short hidden marker to plain text and read it back. Only complete, supported InvisiChar IVC1 markers can be extracted; this is not proof of ownership.

Open the hidden marker tool

The Prose, Code & data, and International text presets initialize review choices. None changes text until you apply the selected findings.

Why context matters

A zero-width joiner can hold an emoji sequence together. A zero-width non-joiner can carry meaningful shaping in Persian and other scripts. Variation selectors can request text or emoji presentation, while bidi controls can be legitimate but also make source text visually confusing. That is why InvisiChar never presents “remove every invisible character” as a safe default.

Read the zero-width character safe-removal guide.

Sources and limits

The hidden-character checker detects a defined set of Unicode characters. It is not a complete Unicode database, JSON parser, AI-origin detector, signature system, or guarantee that a hidden marker will survive another platform.

Last reviewed: 2026-09-01

InvisiChar: local tools for working with text

Start with hidden-character inspection above, or choose a separate writing or data-format task. Each tool runs on this device. Text and results are not passed between pages.