# 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.

**URL:** https://convertto.tech/t/invisible-character-detector
**Category:** AI & LLM Tools (https://convertto.tech/c/ai-tools)
**Privacy:** Runs entirely in the browser; no upload
**Cost:** Free, no sign-up
**Last updated:** 2026-08-01

## Key facts

- **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.

| Character | Code point | What it does | Where it is legitimate |
| --- | --- | --- | --- |
| Zero-width space | `U+200B` | Marks a line-break opportunity without drawing anything. | Letting a long URL or identifier wrap. |
| Zero-width non-joiner | `U+200C` | Stops two characters joining or forming a ligature. | Required in Persian, Arabic and several Indic scripts. |
| Zero-width joiner | `U+200D` | Forces two characters to join. | Emoji sequences, and conjunct forms in Indic scripts. |
| Word joiner | `U+2060` | Forbids a line break at that point, with no width of its own. | Keeping a formula or a name from wrapping. |
| Zero-width no-break space | `U+FEFF` | A 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 space | `U+00A0` | Looks exactly like a space but will not wrap. | Ordinary typography: `10 kg`, `Fig. 4`, spacing inside French punctuation. |
| Soft hyphen | `U+00AD` | Invisible 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](https://convertto.tech/t/prompt-injection-sanitizer).

## 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 a finding proves** — A zero-width character is evidence that text moved through a system that inserts them, not evidence of authorship. If the real question is whether something was machine-written, the [AI writing pattern checker](https://convertto.tech/t/ai-writing-pattern-checker) is a better starting point, and even that reports measurements rather than a verdict.

## 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](https://convertto.tech/t/whitespace-remover) 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.

## How to use

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

## FAQ

### 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.

## Sources

- [Unicode Technical Report #36 — Security Considerations](https://www.unicode.org/reports/tr36/) — Unicode Consortium
- [Unicode Technical Standard #39 — Security Mechanisms](https://www.unicode.org/reports/tr39/) — Unicode Consortium
- [Unicode Standard Annex #14: Line Breaking Algorithm](https://www.unicode.org/reports/tr14/) — Unicode Consortium

## Related tools

- [Edge Case Test String Generator](https://convertto.tech/t/edge-case-string-generator): Generate the strings that break input handling — Unicode, RTL, emoji, injection patterns and boundary lengths.
- [Prompt Injection Sanitizer](https://convertto.tech/t/prompt-injection-sanitizer): Strip invisible carriers, neutralise instruction-like markup and fence untrusted content before you paste it into a prompt.
- [Text Cleaner](https://convertto.tech/t/text-cleaner): Strip smart quotes, invisible characters, ligatures and stray whitespace pasted from Word or a PDF.
- [Remove Accents & Diacritics](https://convertto.tech/t/remove-accents): Convert accented characters to plain ASCII — café becomes cafe, naïve becomes naive.
- [Emoji Search & Picker](https://convertto.tech/t/emoji-picker): Search emoji by name and copy them, with their Unicode code points.
- [Fancy Text Generator](https://convertto.tech/t/fancy-text-generator): Convert text into bold, italic, script, monospace and double-struck Unicode styles.
- [Glitch Text Generator](https://convertto.tech/t/glitch-text-generator): Create corrupted Zalgo-style glitch text using stacked Unicode combining marks.
- [String Byte Size Calculator](https://convertto.tech/t/string-byte-counter): Measure text in UTF-8, UTF-16 and UTF-32 bytes, code points and grapheme clusters.
