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.
| 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. |
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+00A0in 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+202Edeserve 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?
What is the Unicode tag block?
Is a non-breaking space a problem?
How to use the invisible character detector
- 1Enter or paste your text.
- 2Choose the then.
- 3Turn "Keep non-breaking spaces" on or off as needed.
- 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
Related tools
Last updated
More ai & llm tools