Claude invisible characters
What the Claude invisible character detector does
Paste in text copied from Claude and this app finds the zero-width and non-printing Unicode characters hiding inside it, ones that take up no visible space but sit in the byte stream regardless. It's built for the question people search for, why does Claude text have hidden characters, answering with a specific list, not a vague warning about secret watermarks.
It runs as a server tool: text you paste goes to our AI server to be scanned, and comes back with every hidden character named and located. You get 5 free checks in any rolling 24 hours, no account, no plan, no upgrade screen behind the free runs.
This app treats a finding as information, not an accusation. These characters turn up in text copied from Claude for mostly mundane reasons, and the sections below explain them honestly before getting into what to do about them.
Workflow
How to check Claude text for invisible characters in three steps
Three steps, and nothing to configure beforehand. Paste plain text, get a plain-language list of findings back.
- 1. Copy from Claude
- Use Claude's own copy button rather than selecting text by hand. That's the version most likely to carry hidden characters.
- 2. Run the check
- The text goes to our AI server once, gets scanned for hidden Unicode, and the findings come back to the page.
- 3. Read what's flagged
- Each character is named and located. Nothing in your text is changed; the app 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
- Takes up 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
- 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 shows up 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 the part the app is honest about instead of playing up. Despite a lot of talk online about Claude hiding secret watermarks in its output, that's not what's usually 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 into 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 came from 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 app won't claim otherwise. A hidden character is a formatting artefact of the copy path, not a Claude-specific fingerprint. The same characters turn up in human-typed documents exported from Word, translated text and PDF copy-paste, with Claude nowhere in the chain.
It's 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 a statistical test can detect, not by inserted characters. That's a genuine technique, and no character scan, including this one, can see it. A claim that Claude hides a watermark findable by scanning for zero-width characters describes something that isn't 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 in 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 app, 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 app runs the check server-side: your text travels to our AI server to be scanned, then the result travels back, which is why the free run is metered.
You get 5 free checks in any rolling 24-hour window, tracked without an account. Five covers most real uses: one response, one document, one flagged section at a time. For a longer batch, spacing checks across the day works better than burning the allowance at once.