Claude invisible characters
What the Claude invisible character detector does
Paste in text copied from Claude and this tool finds the zero-width and non-printing Unicode characters inside it, without changing how the text looks. It answers the question people type into a search bar, why does text from Claude have hidden characters, with a specific list of what it found, not a vague warning about secret watermarks.
This is a server tool, not a browser script. Your text is sent to our AI server to be checked; you get 5 free checks in any rolling 24 hours. There's no account to create, and no text you paste is needed twice.
What comes back is a list of findings, not an accusation. Hidden characters turn up in text copied from Claude's interface for mostly mundane reasons, and this page explains those reasons honestly before it gets into what to do about them.
How it works
How to check Claude text for invisible characters in three steps
It takes less time than reading the result does. There's no formatting to strip out first, and nothing to configure before you run the check: paste, run, read.
- Step 1
- Copy the text from Claude using its own copy button rather than selecting it by hand. That's the version most likely to carry hidden characters.
- Step 2
- Press Check text. It goes to our AI server once, gets scanned for hidden Unicode characters, and the result comes back to the page.
- Step 3
- Read each flagged character and where it sits. Nothing about the text is changed; this page only reports what it found.
The characters
The hidden characters Claude's copy button leaves behind
Claude's chat interface renders replies as formatted, often markdown-heavy, rich text, and converting that to plain text on copy is where most of these characters slip in. Each is an ordinary Unicode codepoint with a legitimate technical purpose:
- U+200B zero-width space
- Occupies a character slot and renders nothing. The most common invisible character in text copied from Claude.
- U+200C / U+200D joiners
- Zero-width non-joiner and joiner, sometimes left over from how Claude's rich text renders characters and emoji.
- U+2060 word joiner
- An invisible joiner that prevents a line break at that point, often sitting near a dash or a formatted phrase.
- U+FEFF byte-order mark
- A marker meant to sit at the start of a file, occasionally left mid-response by an export or copy path.
- U+00AD soft hyphen
- Invisible until a line wraps there, then a hyphen appears in a word that never had one.
- U+00A0 / U+202F non-breaking spaces
- Look identical to a normal space, behave differently in code, slugs and search.
- Bidi controls (U+202A to U+202E)
- Directional embedding and override characters, rarer in Claude text but worth checking for.
Where they come from
Why Claude text carries hidden characters
This is worth being straightforward about. Despite a lot of talk online about Claude hiding secret watermarks in its output, that isn't what's happening. These characters are overwhelmingly incidental artefacts of how the chat interface's rich-text editor tracks formatting and cursor position, and of converting that rich text to plain text on copy.
The same kinds of characters show up when you copy out of a Word document, a Google Doc, a PDF or a translated page, none of which involve Claude. Finding a hidden character in text copied from Claude tells you something about that copy path. It doesn't, by itself, prove the words were written by Claude rather than another source, or that Anthropic marked the text on purpose.
What a finding actually means
Does finding a hidden character prove Claude wrote the text?
No, and this tool won't claim otherwise. A hidden character is a formatting artefact of the copy path, not a Claude-specific fingerprint. The same characters show up in human-typed documents exported from Word, translated text and PDF copy-paste, with Claude nowhere in the chain.
It's also worth separating this from a different, real area of research: statistical, token-level watermarking, where a model's word-choice probabilities are tuned in a pattern detectable by a statistical test, not by inserted characters. That's a genuine technique some labs have explored, and no character-level scan, including this one, can see it. If you've heard Claude hides a watermark findable by scanning for zero-width characters, that claim describes something different from how real watermarking research works.
Why you might see a flag
Why human-written text can trigger this too
Plenty of ordinary human workflows produce the same characters as a Claude copy-paste, which is why a flag here isn't evidence of who wrote the underlying words.
- Word processor exports
- Word, Google Docs and similar tools insert non-breaking spaces and soft hyphens as part of normal formatting.
- Translation tools
- Machine and professional translation software frequently leaves directional or joining characters behind.
- PDF copy-paste
- Extracting text from a PDF often introduces stray characters the original document never displayed.
- Other chat interfaces
- ChatGPT, Gemini and other assistants render rich text too, and can leave similar characters behind on copy.
- CMS and rich-text editors
- Switching between rich text and plain text views in a CMS is a common source of leftover formatting characters.
Why it matters anyway
What these hidden characters actually break
These characters cause real problems once text moves somewhere that parses it strictly. A zero-width space inside a heading splits a keyword, so a page's slug and visible title stop matching. A byte-order mark stuck inside a JSON file breaks the parser, and non-breaking spaces confuse diffing tools and find-and-replace.
Pasting straight from Claude into a CMS, an email or a code editor is exactly where these problems surface. Checking first turns a category of confusing formatting bugs into a non-event.
Who uses it, and the free checks
Who uses this detector, and how many free checks you get
Writers, editors and developers pasting Claude output into a CMS, an email or a codebase use this to catch formatting problems before they cause one. This is a server tool: your text travels to our AI server to be checked, then the result travels back, which is why there's a limit on it.
You get 5 free checks in any rolling 24 hours, tracked without an account. Five is enough for most real uses: one response, one document, one flagged section at a time. The window rolls forward continuously, not resetting at a fixed hour.