Zero-width characters in AI text: what they are and how to find them
By Claude Watermark Research · Updated
Zero-width characters are real Unicode code points that render as nothing — most often the zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D) and the byte-order mark (U+FEFF). They do appear in text copied from AI chat interfaces, but they are a side effect of web rendering, not a deliberate watermark.
Where they come from
Web interfaces insert them for layout: to allow line breaks inside long strings, to hold formatting boundaries, or as leftovers from text normalisation. Copying rendered HTML brings them onto the clipboard along with everything else visible.
They are not unique to AI output. Any copy from a web page can carry them, and word processors add their own. Their presence tells you the text passed through a browser, not that a model produced it.
Why they are not the watermark
This is the most common confusion in this whole category, and several products are built on it. Anthropic's watermark is distributional: a keyed bias on which word gets chosen. It lives in the word choice itself, so stripping invisible characters cannot touch it.
Removing zero-width characters is still worth doing — they break search, string comparison, word counts and diffs, and they are trivially visible to anyone who looks at the bytes. Just do not believe a tool that claims removing them defeats a watermark.
How to see them
In a code editor, enable rendering of control characters, or search for the code points directly. In a terminal, `grep -P '[\x{200B}-\x{200D}\x{FEFF}]'` finds them. Pasting through a plain-text editor removes most, though not always the byte-order mark.
Our checker lists every occurrence with its position and code point, so you can see exactly what is in your text before deciding to remove anything.
Questions
- Do zero-width characters prove text is AI-generated?
- No. They indicate text was copied from a web page. That page might have been a chat interface, a blog or a documentation site.
- Will removing them break my text?
- Almost never. In rare cases they are load-bearing — inside certain scripts and in some emoji sequences the joiner is meaningful — which is why a checker that shows you each one beats a blind strip.
Check your own text. Free, unlimited, no account, and it runs in your browser so nothing is uploaded.
Open the checker






