Paste your text and every character that takes up no room is found, named and shown the door. These are the ones behind two identical-looking rows that refuse to match.
A zero-width space is a real character with a real place in your text. It just occupies no width, so nothing on screen tells you it is there. Chatbots emit them, so do Word, PDFs and half the CMSes in the world, and copying from a web page picks up whatever the page was carrying.
They stay quiet until something has to compare two strings. A search that finds nothing in a document you can see the word in. Two spreadsheet rows that refuse to match. A URL slug with a gap in it. A password field that rejects a password you are certain you typed correctly.
Every other tool of this kind hands back text that looks exactly like the text you pasted, and leaves you to take it on faith. With a problem you cannot see, that is not much use.
So this one names them. You get a count of each kind — three zero-width spaces, one byte order mark, two no-break spaces — before and after you do anything about it. If the list is empty, your text was clean and you have ruled something out.
That also makes it a decent diagnostic on its own. Paste in the row that will not match and the list usually explains why in about a second.
People mean two different things by that phrase, and only one of them is something a tool can remove.
The removable kind is a pattern of zero-width characters threaded through the text. It is real, it is used to fingerprint a document so a leak points back at whoever it was sent to, and it is exactly what this page strips — the report will name every one it finds.
The other kind is statistical. Google's SynthID and schemes like it bias which words the model picks, so the watermark lives in the choice of words themselves. There is nothing to delete. Any tool claiming to strip that with a find-and-replace is either confused or lying, and rewriting the sentences is the only thing that touches it.
It removes one of the two things that name is used for, and it is worth knowing which. Invisible-character watermarks are real: a pattern of zero-width characters threaded through the text, used to fingerprint a document so a leak points back at whoever it was sent to. Those come out here, and the report names every one it finds. Statistical watermarks are the other kind - Google's SynthID and schemes like it bias which words the model picks, so the mark lives in the choice of words and there is nothing to delete. No find-and-replace touches that, here or anywhere else, whatever the page selling it says.
A Cyrillic a and a Latin a are different characters that draw the same shape. A word with one hiding in it looks perfect and matches nothing, which breaks search, breaks a lookup, and is the oldest trick for spoofing a brand name in a link. It is switched on because it only ever touches a word that mixes scripts: a word written entirely in Cyrillic or Greek is a real word in a real language and is left exactly alone.
Look at the count rather than the text. That is the whole difficulty with this problem: the characters take up no width, so removing them changes nothing you can see. If the count says four were found, four were there. If it says none, your text was clean and you have ruled something out.
It can, which is why the caveats are on the options rather than buried here. The zero-width joiner is what holds a family emoji together as one picture and what connects letters in Arabic and several Indic scripts, so untick that box if your text has any. Variation selectors, which decide whether an emoji renders as a picture or as a plain symbol, are left switched off for the same reason.
Yes, and it is not theoretical. A run of zero-width characters can encode a hidden message or a per-recipient fingerprint, so a leaked document points back at whoever it was sent to. Unicode tag characters can carry a whole block of invisible text, which is one way instructions get smuggled into something an AI will later read. All of them are removed here, and the report names them.
It is a single invisible character some programs write at the very start of a file to mark the encoding. Excel adds one. It is harmless until something reads the file without expecting it, at which point your first column header quietly stops matching and the import fails on a field that looks perfectly correct.
Whitespace Cleanup deals with spacing you can see: repeated spaces, tabs, stray blank lines. This deals with characters you cannot. They overlap on the unusual spaces and nowhere else, so running both is reasonable if your text is in a bad way.