ChatGPT watermark checker & detector

ChatGPT Hidden Characters & AI Watermark Checker

Use this free ChatGPT watermark checker and AI watermark checker to run watermark checks on text pasted from ChatGPT, Claude, Gemini, or Copilot. Acts as a ChatGPT watermark detector and AI watermark detector for invisible Unicode — zero-width spaces, BOM, bidi marks — then lets you remove them without changing a single visible word.

What the hidden characters actually are

When you copy text from a ChatGPT reply or a Claude response, the clipboard can include Unicode codepoints that are invisible in most applications but very real in the underlying byte stream. The most common ones:

Codepoint Name Effect
U+200B Zero-width space (ZWSP) Invisible word-break opportunity; breaks byte comparisons
U+200C Zero-width non-joiner (ZWNJ) Affects rendering in Arabic/Persian; invisible in Latin text
U+200D Zero-width joiner (ZWJ) Used in emoji sequences; stray copies break string matching
U+FEFF Byte-order mark (BOM) Causes "command not found" errors at the start of pasted shell commands
U+202A–U+202E Bidi embedding controls Can flip RTL/LTR rendering; used in "Trojan Source" code attacks
U+00A0 Non-breaking space (NBSP) Looks like a space; breaks word-wrap rules and string splits

Which AI models produce them — and why

These characters are not a deliberate watermarking scheme from any of the major labs. They appear because:

ChatGPT, Claude, Gemini, Copilot, and most other web-based AI chat tools can all produce output that carries these characters on copy. The frequency varies by interface version and operating system clipboard behaviour.

Why hidden characters cause real problems

Invisible Unicode breaks things that look identical to the human eye:

Check your pasted text for hidden characters →

Why this is not really a "ChatGPT watermark" — but why it still matters

People searching for a ChatGPT watermark checker or ChatGPT watermark remover often have one of two things in mind:

  1. Invisible characters from copy-paste — the problem described on this page. Deterministic, verifiable, fixable.
  2. Statistical / SynthID-class watermarks — a signal hidden in which tokens were sampled, spread across the wording of the entire text. Not detectable by character inspection; not fixable without rewriting the prose.

OpenAI’s 2026 text watermark, textGrain, is the second class: a pattern in token choice, not a character a scanner can count. The detector key is not public. How that watermark works is a separate article. A tool that claims to remove it by paraphrasing is rewriting, not detecting. This tool only addresses the first class — invisible Unicode — because those codepoints are verifiable and removable without changing visible words.

How to check for hidden characters

  1. Go to the Text tab on AI Watermark Remover
  2. Paste your ChatGPT, Claude, or Gemini output
  3. Click Check
  4. The result card shows:
    • A count of each invisible codepoint type found
    • The exact character offsets so you can pinpoint the location
    • Whether any C2PA or AI metadata is also present (for file uploads)
  5. If hidden characters are found, the Clean it button becomes active. If none are found, the button stays disabled — the text is already clean.
Run the AI watermark check →

How to remove ChatGPT hidden characters

After Check reports invisible characters, click Clean it. The cleaner:

You can immediately re-run Check on the cleaned output to confirm the count of invisible characters drops to zero. The operation is fully transparent and reversible (you still have the original).

Will removing hidden characters fool AI detectors like GPTZero?

No. Style-based AI detectors (GPTZero, Originality.ai, Turnitin) analyse the wording — sentence structure, perplexity, burstiness — not the invisible byte layer. Removing zero-width spaces does not change a single word, so the detector score will be essentially unchanged.

Cleaning invisible characters is text hygiene, not evasion. It fixes real engineering problems (broken diffs, failed searches) and cleans up formatting artifacts. It is not a way to make AI-generated writing "pass" as human. It also does not remove textGrain. That limit is spelled out in can you remove a ChatGPT text watermark.

How to see the characters without a website

A scanner is convenient because it counts and offers to delete. The characters are still just Unicode, so any environment that prints codepoints will show them. In Python, ascii() or a loop over ord(ch) prints \\u200b and friends instead of pretending the string is only the letters you see. In a hex dump of a UTF-8 file, U+200B is the three bytes E2 80 8B. U+FEFF at the start of a file is EF BB BF. If those bytes are absent, the character scan on this site should agree.

Editors differ. VS Code and some terminals render a zero-width space as nothing, which is the bug. A “render whitespace” setting may still skip format characters that are defined to have no width. Word processors sometimes substitute a glyph only when you turn on formatting marks, and even then a non-breaking space looks like a degree sign or a small circle rather than like the word “watermark.” Do not wait for a highlight in the chat window. The chat window is what hid the character.

The offsets this site prints are indexes into the Python-style string, so you can jump to the same place in a script. After Clean, the offsets should be gone because the codepoints are gone. If a second tool still complains, compare bytes. A smart quote or a non-breaking space can remain when you asked only for zero-width removal, and the optional space-normalization pass is what folds those if you enabled it.

What survives Docs, Word, Slack, and email

The clipboard is not one format. Browsers put both a plain-text flavor and an HTML flavor on the pasteboard. A destination that prefers HTML can reintroduce formatting characters the plain-text flavor never had, and a destination that prefers plain text can drop some of them. That is why a string can look dirty in Slack and clean in a code editor, or the reverse, without anyone “adding a watermark” in between.

Scan the version that will be stored. Cleaning a local buffer and then pasting through a second rich-text box can put a cousin of the same character back. The reliable loop is Check, Clean, copy the cleaned plain text, paste into the destination, export or copy back out, and Check again.

How this differs from textGrain in 2026

OpenAI’s current provenance notes draw the line in a sentence: text watermarking changes the statistical pattern of word choices and does not insert hidden characters, extra tokens, or unusual punctuation. Copying the text does not add a secret Unicode layer as the mark. So a draft can be watermarked in the textGrain sense and contain none of the codepoints in the table above. A draft can also contain those codepoints and be unmarked, because the API switch was off or the text predates the EU rollout.

Use both facts. If the engineering problem is a broken command or a phantom diff, stay on this page and use the ChatGPT watermark detector. If the question is whether EU ChatGPT text carries a sampling pattern, go to how textGrain works and where it is turned on. A zero count is not a human-written certificate. That misreading is what a missing signal means, including the case where the signal was never a character.

Style detectors remain a third column. Removing U+200B does not change GPTZero or Turnitin, because the words did not change. Rewriting the words to chase those scores is a different project, and it is not what Clean does. See watermark versus an AI detector. Editors who receive a draft from a freelancer should scan this layer anyway, then keep a note that a zero count is hygiene, not an origin finding. That intake is how to check a blog writer. If the draft includes a downloadable code sample, scan the file the reader will copy, not only the HTML around it. A BOM in a fenced block is the usual leftover.

FAQ

Does ChatGPT add a hidden watermark to text?

ChatGPT can carry OpenAI’s textGrain pattern on eligible EU text, and on API text when a customer opts in. That pattern is not a hidden character. Copy-paste can still introduce invisible Unicode as a clipboard artifact. The two are different layers. This page is about the characters.

How do I check my text for ChatGPT hidden characters?

Paste into the Text tab on this tool and click Check. The detector lists each invisible codepoint type and count. If any are found, the Clean button activates.

What are zero-width spaces and why do they matter?

Zero-width spaces (U+200B) are real Unicode codepoints invisible in most editors. They break byte-level comparisons, cause diffs to show phantom changes, and can make shell commands fail.

Will cleaning the text change any visible words?

No. Only invisible format characters are removed. Every visible letter, number, and punctuation mark stays in place.

Does removing them fool AI detectors?

No. Style detectors analyse wording, not invisible byte characters. Cleaning zero-width spaces has no effect on a GPTZero or Turnitin score.

Does this work for Claude, Gemini, and Copilot too?

Yes. The invisible character problem is not specific to ChatGPT — it can occur when copy-pasting from any web-based AI chat interface. The checker and cleaner work the same way regardless of the source model.

← Back to AI Watermark Checker & Remover