Text & Writing

Invisible Character Detector

A string can look ordinary while containing a zero-width space, a nonbreaking space, or a direction mark. Paste it here to see those code points, their positions, and a preview of the changes you choose.

Free online tool

Loading tool…

Paste text to begin.

Choose what to change

0 code points selected for removal or replacement. Joiners, bidirectional controls, and variation selectors are preserved by default. Maximum input: 250,000 UTF-16 code units.

No external text service is used. Descriptions are a small curated set; unnamed findings use a property-based description and an exact U+ code.

GET STARTED

How to use the Invisible Character Detector

  1. 01

    Paste the text that is producing an unexpected match, line break, or copy-and-paste result.

  2. 02

    Review the visible markers and the table of code points. Positions count code points from 1; UTF-16 offsets start at 0.

  3. 03

    Select only the character groups you want to remove or replace. Joiners, direction marks, and variation selectors remain intact by default.

  4. 04

    Copy the cleaned text or download the text and a separate JSON findings report.

Examples

An identifier that does not match

AB followed by U+200B and then 123 looks like AB123 but is a different string. Removing zero-width spaces joins the visible pieces.

A family emoji contains hidden joiners

👨‍👩‍👧‍👦 uses U+200D between its component emoji. The detector flags those joiners, but the default cleanup preserves the family sequence.

A space that prevents a line break

In Order number, the gap can be U+00A0 NO-BREAK SPACE. Converting unusual spaces to ordinary spaces changes where the text may wrap.

Invisible does not mean unnecessary

Zero-width joiners and non-joiners can control shaping in Arabic, Persian, and Indic scripts. Variation selectors can choose emoji or text presentation, and direction marks can keep mixed-direction text readable. Review their context before selecting a removal group.

What this detector checks

The scanner checks the browser’s Unicode default-ignorable property, unusual Unicode whitespace, and control characters. Ordinary U+0020 spaces, tabs, carriage returns, and line feeds are not flagged. Unicode line and paragraph separators are flagged separately and can be converted to LF. This is a text-inspection tool, not a comprehensive confusable-character or security scanner.

What to know

  • Detection follows the Unicode property tables supported by your browser; a recently added character may behave differently across browsers.
  • The table displays the first 250 findings. Cleanup and the JSON report include every detected finding. Input is limited to 250,000 UTF-16 code units.

Common questions

Why is my emoji listed as having invisible characters?

Some emoji use joiners, variation selectors, or tag characters to form a particular presentation. They can be essential parts of the emoji. Those groups are off by default in cleanup.

Does the detector remove everything automatically?

No. It previews a separate output using your selected groups. Only removal of U+200B zero-width spaces and U+FEFF byte-order marks is selected initially; you can also deselect it.

Why are positions different from a JavaScript string index?

The displayed position counts Unicode code points from 1. JavaScript indexes count UTF-16 code units from 0, so a supplementary character before a finding changes the difference. The table shows both measures.

Does my pasted text leave this page?

The detector processes your text locally in browser memory. Copy and download actions use browser features and do not send the input to a server.

Sources & references