"Unicode watermark" gets used for two different things. One is made of invisible characters and can be removed. The other is not made of characters at all.
Character-level markers
Some systems mark text with invisible characters. Microsoft documents one for some Windows AI text APIs: the four-character sequence U+200B U+034F U+2060 U+200B (zero width space, combining grapheme joiner, word joiner, zero width space), added to generated text starting in October 2026 (Microsoft's documentation).
Because these markers are characters, a cleaner can find them. textscrubr recognizes that exact sequence and reports it by name, along with every other invisible character in the text.
Word-choice watermarks
Claude (since August 2026) and ChatGPT in the EU (since October 2026) use a different method: the model's choice between equally likely words is guided by a secret key. The text contains only ordinary characters, so there is nothing to strip. No character cleaner removes these, and tools that claim to are overstating what they do.
Ordinary hidden characters
Most invisible characters in pasted text are not markers at all. Zero-width spaces, non-breaking spaces, byte-order marks and soft hyphens come from copying between apps, word processors and web pages. They are not evidence that AI wrote the text, but they break URLs, search, code and data.
How to remove the characters safely
Manual deletion does not work, because you cannot place your cursor on a character you cannot see. Use a cleaner that works by code point and understands context. textscrubr:
- lists every invisible character with its code point, name and position (Inspect)
- removes the ones with no job in the text and converts unusual spaces to normal ones (Clean)
- keeps the ones that carry meaning, such as joiners in Persian and Hindi words, emoji sequences and right-to-left marks in Arabic or Hebrew text
- flags bidirectional controls for review instead of silently removing them
It runs entirely in your browser, so the text is never uploaded.
Confirm it worked
Run Inspect again on the cleaned text. Anything left will be listed with the reason it was kept.