Invisible Characters in Text

Copy text out of a chat window, a PDF, or a Word document, and something you can't see almost always comes with it — a zero-width space, a stray joiner, a non-breaking space standing in for a normal one. Paste below and the counter shows exactly how many hidden characters are in there, and which ones. Free, no sign-up, nothing uploaded.

Cleaning happens in your browser: that text never leaves this page, and there is no upload, no account and no limit. Rewrite is the exception — that one sends your text to our server.

What counts as an invisible character

Anything that changes what a computer reads without changing what your eyes see. The paste above looks identical before and after — that is the whole problem. A few of the most common ones, out of the 431 named characters the tool checks for:

Where they come from

A chat assistant. ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek and Perplexity all render their replies with characters you never see: zero-width spaces between words, curly quotes, an em dash. Copy the reply and those characters copy with it. If you know which assistant your text came from, the exact list for that one is here: ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek, Perplexity. It is the same cleaner on every one of those pages — only the framing changes.

A PDF. Select a paragraph in a PDF reader and copy it, and the text layer brings its soft hyphens and non-breaking spaces along — both put there on purpose, to control where the original document broke a line. Paste that into a form field that checks its input and the soft hyphen is usually why it gets rejected.

Word or Google Docs. Autocorrect turns straight quotes into curly ones and a double hyphen into an en dash. Word's own line-breaking quietly adds non-breaking spaces and soft hyphens you never typed. None of it shows in the document. All of it can survive into a plain-text field that was not expecting it.

What the counter actually shows

Paste your text and the counter above updates as you type. It gives you a total — "Found 6 hidden characters in 240 characters" — and underneath it, a table naming each one it found and how many times: Zero Width Space, Non-Breaking Space, Soft Hyphen, and so on. Press Clean text before you look and there is nothing left to count; the counter is there so you can see what was in your text before it is gone.

What it deliberately does not do

It does not defeat AI detection, and it is not built to. A statistical watermark such as SynthID is not a hidden character you can delete — it lives in which words were picked, so the only way to remove it is to rewrite the text. The cleaner rewrites nothing: run it and your sentences come out character-for-character as you wrote them, minus the debris. (The separate Rewrite button does change your wording — that is a writing aid, and it is the one thing here that sends your text to our server.)

Questions

What exactly counts as an invisible character?

Anything that changes what a computer reads without changing what you see on screen: zero-width spaces and joiners, Unicode tag characters, direction marks, variation selectors, the byte-order mark, soft hyphens, private-use characters, and odd spaces like the non-breaking space. 431 named characters in total, plus the whole private-use block.

Does this remove the AI watermark from my text?

It removes the invisible characters — zero-width spaces, joiners, tag characters and the like — that get carried along when you copy text out of an AI assistant. It does not touch your words. Statistical watermarks such as SynthID live in the word choice itself, so no cleaner can remove those without rewriting your text - and the cleaner rewrites nothing. There is a separate Rewrite button for people who want their wording changed; that is a writing aid, not a way around detection.

Does it matter where the text came from — AI chat, a PDF, Word?

No. The tool matches characters, not sources: text copied out of ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek or Perplexity is treated exactly the same as text copied out of a PDF, Word, Google Docs or a web page. Whatever carried the character in, the cleaner finds it the same way.

Is my text uploaded anywhere?

The cleaner runs entirely in your browser: that text never leaves the page, there is no account, and there is no limit on how much you clean. The separate Rewrite button is the one exception — it sends your text to our server, which passes it to a language model. Nothing is stored either way.

Why does my text break my CMS or code editor?

Invisible characters survive a copy-paste but are not what they look like. A zero-width space inside a variable name breaks the code, a non-breaking space breaks a search, and a smart quote breaks a string literal. Nothing looks wrong on screen, which is what makes it hard to find.

Illustrated portrait of Sam RidderBy Sam Ridder — I build and run TextNinja on my own hardware, on my own. Who I am.