Skip to content
Convertto

Invisible & Watermark Character Detector

Find zero-width spaces, directional overrides, Unicode tag characters and homoglyphs hidden in pasted text — then strip them.

This detector scans text for characters that are invisible when rendered but present in the data: zero-width spaces and joiners, soft hyphens, byte-order marks, bidirectional overrides, the entire Unicode tag block, and Cyrillic or Greek letters that are visually identical to Latin ones. It reports what each one usually means and can strip them, entirely in your browser.

Runs in your browser
Detects
20 named invisible characters, the U+E0000 tag block and 37 homoglyphs
Highest risk
U+202E right-to-left override and the U+E0000 tag block
Privacy
Runs entirely in your browser — nothing is uploaded
Cost
Free, unlimited, no sign-up

The codepoints this actually looks for

Almost every "hidden character" problem comes down to a short list. Each renders as nothing, or as something you cannot tell apart from a normal space, while still occupying a position in the string.

CharacterCode pointWhat it doesWhere it is legitimate
Zero-width spaceU+200BMarks a line-break opportunity without drawing anything.Letting a long URL or identifier wrap.
Zero-width non-joinerU+200CStops two characters joining or forming a ligature.Required in Persian, Arabic and several Indic scripts.
Zero-width joinerU+200DForces two characters to join.Emoji sequences, and conjunct forms in Indic scripts.
Word joinerU+2060Forbids a line break at that point, with no width of its own.Keeping a formula or a name from wrapping.
Zero-width no-break spaceU+FEFFA byte-order mark at the start of a file; a no-break joiner anywhere else.Leading a UTF-8 file. Unicode now prefers U+2060 for joining.
No-break spaceU+00A0Looks exactly like a space but will not wrap.Ordinary typography: 10 kg, Fig. 4, spacing inside French punctuation.
Soft hyphenU+00ADInvisible unless the line breaks there, where it draws a hyphen.Hyphenation hints in justified or narrow text.
The seven behind most reports. Directional overrides and isolates are also covered.

None of those is suspicious on its own. The block worth reacting to is U+E0000 to U+E007F: 128 codepoints that mirror ASCII and render as nothing anywhere. Any ASCII string can be re-encoded into it and carried inside ordinary text, which makes it the usual vehicle for instructions aimed at a model that will read the document later. To neutralise that rather than only report it, use the prompt injection sanitiser.

Why they appear in AI output and pasted text

They are usually collected rather than inserted. Text copied out of a browser picks up whatever the page used for layout: non-breaking spaces from formatted prose, narrow no-break spaces from locale-aware number formatting, zero-width spaces a front end added so long strings would wrap. Word processors add soft hyphens and figure spaces, and a spreadsheet export arrives with a byte-order mark on the first line.

Deliberate insertion happens in narrower cases: tools sold as "AI detector bypass", documents marked to trace a leak, and injection payloads. The major providers do not document invisible-character watermarking of text output, so a finding tells you the text passed through something. It does not tell you what, or whether a model was involved at all.

What to do about each finding

  • In prose, leave non-breaking spaces and soft hyphens alone. They are typography, and stripping them changes how the text sets.
  • In anything that becomes data, strip all of them. One U+00A0 in a CSV column breaks the parse and fails string equality while looking correct on screen. Whitespace cleanup is the milder fix when only spacing is wrong.
  • In an identifier, a filename or a hostname, treat any of these as a defect rather than a quirk.
  • Directional overrides such as U+202E deserve an immediate reaction: they make the rendered order differ from the stored order, which is the mechanism behind filename spoofing.

Frequently asked questions

Do AI models watermark their output with invisible characters?

The major text APIs do not, as a documented feature. What does happen is that copied text picks up zero-width characters from web pages, editors and chat interfaces, and that some third-party tools insert them deliberately. Finding one tells you the text passed through something — not which model wrote it.

What is the Unicode tag block?

A range of 128 code points (U+E0000–U+E007F) that mirrors ASCII but renders as nothing at all. Any ASCII string can be encoded into it and hidden inside ordinary text. It is the usual carrier for instructions aimed at a model that will read the document later.

Is a non-breaking space a problem?

Not in prose — it is correct typography. It is a problem the moment the text becomes data: it breaks CSV columns, fails string equality, silently changes an identifier, and produces "why does this look right but not match" bugs. That is why it is reported separately and stripped only if you ask.

How to use the invisible character detector

  1. 1Enter or paste your text.
  2. 2Choose the then.
  3. 3Turn "Keep non-breaking spaces" on or off as needed.
  4. 4Press Run, then download the result when it is ready.

Sources & specifications

Embed this tool

Put the working invisible character detector on your own site. It runs in your visitors' browsers exactly as it does here — free, no account, nothing uploaded.

Share this tool

Last updated

More ai & llm tools