Free browser tool

See every hidden character in your text.

Text copied from AI chats, web pages, and word processors often carries characters you cannot see: zero-width spaces, odd non-breaking spaces, direction marks, even invisible payloads. They break code, corrupt config files, and quietly mark text as machine-made. Paste below to reveal them, then copy a clean version.

Runs entirely on your device. No requests, no analytics, no storage.

Why pasted text is not what it looks like

Unicode contains dozens of characters with zero width. They render as nothing, yet they count as real characters everywhere it hurts: string comparisons, database keys, URLs, YAML indentation, git diffs. A product name with a zero-width space in it will never match a search for the same name without one. A config value with a trailing word joiner fails validation with an error message that looks impossible.

AI writing tools made this an everyday problem. Chat models are trained on typographically rich text, so their output mixes curly quotes, em dashes, single-character ellipses, and unusual space characters into content that people then paste into code editors, CMS fields, terminals, and billing systems. Some of those characters are also used deliberately, as watermarks or worse.

What this tool finds

CharacterCodeWhat goes wrong
Zero width spaceU+200BSplits words invisibly. Breaks search, matching, and deduplication.
Narrow no-break spaceU+202FAppears in AI chat output around times and units. Looks like a space, fails ==.
Soft hyphenU+00ADInvisible until a line wraps. Corrupts identifiers and product codes.
Bidi overridesU+202A..U+202EReorder displayed text. Can make exe.txt read as txt.exe.
Tag charactersU+E0000..U+E007FCarry an invisible ASCII payload. Used for watermarking and hidden instructions.
Lookalike lettersvariousA Cyrillic ะพ inside a Latin word defeats search, filters, and reviews.
Smart punctuationU+2018..U+2026Fine in prose. Breaks shell commands, JSON, and code snippets.

The narrow no-break space

If one character deserves its own paragraph, it is U+202F. ChatGPT and similar tools insert it between numbers and units, and around times, where a typographer would. Almost nobody types it on purpose. When you find one in a support macro, a WHMCS email template, or a spreadsheet formula, it almost certainly arrived through a paste. It is also why "9:30 AM" sometimes refuses to match "9:30 AM" even though both look identical on screen.

Hidden payloads

Unicode tag characters were designed for language tagging and later deprecated. Each one maps to an ASCII character, and all of them are invisible. That makes them a convenient channel for hiding text inside text: watermarks that survive copy-paste, or instructions smuggled into content that a person approves without ever seeing them. This tool decodes any tag run it finds and shows you the payload. The bidirectional overrides in the table above are the display-reordering cousins of this trick, documented as Trojan Source (CVE-2021-42574).

What gets left alone

Most cleanup scripts strip every invisible character they can match. That destroys real content, because several of these characters do essential work:

This cleaner checks context before it touches anything, and the inspector shows kept characters with a dashed outline so you can see the decision instead of trusting it blindly.

Questions people ask

Is this an AI detector?

No. It finds characters, not authorship. Clean text is not proof a person wrote something, and hidden characters are not proof a machine did. What the tool removes are the mechanical artifacts that cause practical problems and false assumptions.

Will cleaning make AI text read as human?

Only at the character level. Wording, rhythm, and structure are still yours to edit. If you rewrite the words but keep the invisible characters, you keep the problems too, which is the part most people miss.

Is my text uploaded anywhere?

No. The page is static, the analysis runs in your browser, and there are no network requests after the page loads. You can disconnect from the internet and it keeps working, or run it locally from the source.

Can I use the detection rules in my own project?

Yes. The ruleset ships as machine-readable JSON and the engine is a dependency-free ES module under the MIT license.

Why I built this

While cleaning up my own GitHub profile I went through every public file removing the typographic tells that AI tools leave behind, one em dash at a time. Halfway through it occurred to me that the invisible characters were the bigger risk, and that I had no way to see them. This is the tool I wanted that afternoon.