
Copy a paragraph out of ChatGPT, paste it into Word, and you have moved more than the words. Somewhere in that block of text are characters that occupy real positions in the file and render as nothing at all. You cannot see them by looking. Your word processor cannot show them without being asked. Every parser that touches the document afterwards can see all of them.
This is the concrete half of what people call a ChatGPT watermark. It is not a tracking system and it is not deliberate. It is a side effect of copying text out of a web interface that renders formatting, and it causes a specific, boring, repeatable set of problems.
Key Takeaways
The characters, one at a time
Each of these is a legitimate Unicode character with a legitimate purpose somewhere. None of them has a purpose in an English essay you typed yourself, because your keyboard cannot produce them.
| Character | Code point | What it looks like | What it does to you |
|---|---|---|---|
| Zero-width space | U+200B | Nothing | Splits a word invisibly |
| Zero-width non-joiner | U+200C | Nothing | Leftover from inline rendering |
| Zero-width joiner | U+200D | Nothing | Leftover from inline rendering |
| Word joiner | U+2060 | Nothing | Prevents a line break you did not ask for |
| Byte-order mark | U+FEFF | Nothing | Artefact of how the text was encoded |
| Soft hyphen | U+00AD | Nothing, usually | Appears as a hyphen only if the word wraps |
| Non-breaking space | U+00A0 | A space | Wraps differently from a real space |
| Narrow non-breaking space | U+202F | A space | Same, and narrower |
| Thin space | U+2009 | A space | Same, and narrower still |
The first six are genuinely invisible. The last three are worse in one respect: they look exactly like the space bar output sitting next to them, so even someone who knows to look cannot spot them by eye.
The one you can see
Em dashes are the honourable mention. A dash is not hidden — it renders, obviously. But nobody typing an essay in a hurry produces three em dashes per paragraph, and heavy em dash use is the single most recognisable signal of AI-drafted prose in 2026. It belongs on the same checklist even though it belongs in a different category.
Where they come from
The chat interface is a web page. Your response is HTML: bold spans, list items, inline code, paragraph breaks. When you hit the copy button, the browser converts that rendered HTML into text, and the conversion is not lossless in the direction you would expect. It is lossy in the other direction — formatting that had structural meaning in HTML gets flattened into characters that hold the layout together in plain text.
A non-breaking space existed so a number would not wrap away from its unit. A word joiner existed so an inline code fragment would not split across lines. A zero-width space existed so a very long token could wrap gracefully. Flatten the page and those decisions arrive in your document as literal characters.
This is why the problem is not unique to ChatGPT. Claude, Gemini, Copilot, and every other chat interface renders HTML and gets copied the same way. If you want the model-specific version of this, we have one for Claude and one for Gemini, because their copy paths differ in the details.
How you find out you have them
Almost never directly. The characters announce themselves through symptoms that look like something else entirely:
- Find-and-replace misses a word that is visibly right there. There is a zero-width space inside it, so
managementis stored asmanage+U+200B+mentand your search formanagementmatches nothing. - Your word count disagrees with your editor's. Different tools split on different characters.
- An exact-match keyword silently stops matching. In a title tag or meta description, this means an SEO tool reports one thing and the crawler parses another.
- A WordPress block scrambles on save. Control characters and leftover attributes crash Gutenberg's parser.
- A citation manager fails to match a reference it should have matched. The author string contains a non-breaking space where a normal one should be.
- Justified text breaks strangely. Non-breaking spaces refuse to stretch the way real spaces do.
Every one of these costs half an hour and none of them points at the real cause. That is the actual damage: not that the characters are dangerous, but that they are expensive to diagnose.
Do they prove you used AI?
No, and this matters both ways.
They are not evidence of anything on their own. Text copied from a PDF, a Wikipedia article, a Word document written in 2009, or a colleague's email can contain exactly the same characters. Nobody is running a scan for zero-width spaces and concluding you cheated, and any tool claiming to detect AI authorship from hidden characters is selling you something.
But they do not help you either. If your work gets questioned, a document full of formatting artefacts from a chat interface is not the thing you want to be explaining. And the characters travel forever — they survive every copy, every save, and every export until something deliberately removes them.
Removing them
Deleting a known character is a lookup, not a judgement call. It requires no model, no cleverness, and no decision from you. That is why we do it automatically on every pass rather than making it a feature you have to remember to turn on.
- Paste your text into the workspace on the PassMyEssay homepage.
- Hit Clean. Every character in the table above is stripped in a single pass — the invisible ones removed outright, the space-like ones replaced with an ordinary space.
- Copy the result into Word, Docs, Gmail, or your CMS.
Do it last, immediately before you send. The characters accumulate with every paste out of a chat window, so one clean at the end beats cleaning as you go.
The half that is not characters
Here is the thing worth being honest about: stripping these characters fixes your document, not your writing. A paragraph with every hidden byte removed still opens with "In today's rapidly evolving landscape," still runs a tricolon in every third sentence, and still reads to a human being exactly like a machine wrote it.
That layer is not a lookup. It needs the sentence understood — which claim is load-bearing, which phrase is filler, where the rhythm has gone flat — and rewritten. That is the harder half of the job and the one that actually changes how your work is received.
Related: why AI writing sounds robotic, how to humanize ChatGPT text, what is an AI humanizer.
Try PassMyEssay free → Strip every hidden character in one pass, then fix the phrasing that gives it away.
Keep Reading
Related guides
Does ChatGPT Watermark Its Output? A Straight Answer
Separating what OpenAI actually does from what the internet claims — no hidden signature, two real traces, and what each one means for your document.
Zero-Width Spaces: The Invisible Character Breaking Your Document
What a zero-width space is, why it appears in text copied from AI chat interfaces, and the specific things it breaks in Word, WordPress, and SEO tools.
Why Claude Artifacts Paste Badly Into Word and Google Docs
Copying out of a Claude Artifact gives you a rendered document, not plain text. What comes along, why it fights your template, and how to get clean text out.
Why Find-and-Replace Fails on Text You Pasted From AI
Your search finds nothing on a word that is visibly on screen. Here is the invisible character causing it, how to confirm it, and how to fix the whole document at once.
Make your draft clearer
Use PassMyEssay to rewrite AI-assisted text responsibly, check weak sections, and keep your meaning intact.
Try PassMyEssay