What is actually inside AI-generated text?
Four layers of characters that are not words. AI output from ChatGPT, Claude, or Gemini looks like plain prose on screen, but the bytes underneath carry hidden Unicode, spaces that are not the ordinary U+0020, typographic punctuation, and the markdown the chat window was rendering for you. Each layer breaks something different once the text leaves the chat window.
1. Hidden characters
Code points with no visible glyph — zero-width space (U+200B), word joiner (U+2060), soft hyphen (U+00AD), byte order mark (U+FEFF). They are real characters to every program, so they break search, diffs, and code while leaving the page looking perfect. The full reference list names every one we detect.
2. Lookalike spaces
Non-breaking spaces (U+00A0) from the chat interface's HTML, and the narrow no-break space (U+202F) that briefly appeared in model output in April 2025. Both look exactly like a normal space and both forbid a line break, which is what glues words together when your layout reflows. See removing non-breaking spaces.
3. Typography tells
Curly quotes (U+2018, U+2019, U+201C, U+201D), em dashes (U+2014), and ellipsis characters (U+2026). These are visible, legitimate punctuation — but they clash with style guides, confuse markdown editors, and read to many people as an AI tell. Our em dash guide covers what the evidence actually supports.
4. Markdown residue
Chatbots write markdown — **bold**, ### headings, backticks — and the chat UI renders it. Paste as plain text and the raw markers come with it, so a report pasted into an email reads "**Key findings:**". Stripping them is an optional pass, because some editors (Notion) parse them into real formatting instead.
Where do the hidden characters in AI text come from?
Mostly from the pipeline around the model rather than from the model itself. Chat interfaces are HTML, and HTML is full of non-breaking spaces; Word, Google Docs, PDFs, and web pages add soft hyphens and exotic spaces of their own as the text passes through them. Originality.ai's testing found that the LLMs it tested did not inject invisible characters at all — the characters mostly arrive through those copy-paste pipelines.
Models have contributed too, once, in a well-documented episode. Days after OpenAI launched o3 and o4-mini on April 16, 2025, the academia startup Rumi reported that those two models were placing narrow no-break spaces (U+202F) where ordinary spaces belong in longer outputs. OpenAI told Rumi the characters were "a quirk of large-scale reinforcement learning" and not a watermark, and they disappeared from output within days. So the honest summary, as of August 2026: no mainstream chatbot is known to watermark its text with hidden characters, but hidden characters do reach your clipboard regularly, which is why a five-second check is worth it. The whole story is on our ChatGPT watermark page, and which hidden characters ChatGPT emits breaks the sources down character by character.
Why does AI text break formatting in Notion or WordPress?
Because rich editors treat these characters as instructions, not as decoration. A non-breaking space tells the layout engine it may not wrap there, so two words glue into one unbreakable unit on a narrow screen. A zero-width space inside a word makes that word unfindable in search while looking completely normal. Markdown markers either render as literal asterisks or get parsed into headings you did not ask for. And smart quotes inside a code block or a CSV import fail in ways that are painful to debug precisely because the text looks right.
The fix is the same in every destination: normalize the characters before you paste, not after. Our guide to pasting AI text into Word, Google Docs, and Notion has the per-app details, including why Ctrl+Shift+V only solves half the problem — it strips formatting, and every character in the list above survives it.
How do you clean AI text?
Paste it into the AI text cleaner — that is the tool page for this job, and it handles output from any model. It scans your text, names every hidden character it finds by code point, and returns the same wording with the character-level baggage removed. Everything runs in your browser; nothing is uploaded.
The order of operations matters more than it sounds. Detection runs first, on the untouched input, because NFKC normalization folds U+202F into a plain space — a tool that normalizes first can never tell you the character was there. Only after the per-character scan and strip does the text get normalized, whitespace-repaired, and (optionally) typography- and markdown-normalized. Every rule is documented on the how it works page, including which presets turn which passes on.
What does cleaning AI text not fix?
It does not make AI text undetectable, and any tool that promises otherwise is misleading you. AI detectors analyze the statistical structure of writing — word choice, sentence rhythm, perplexity and burstiness — which character cleaning never touches, because it changes zero visible words.
It also cannot remove a statistical watermark. Google DeepMind's SynthID-Text, described in Nature (October 2024), biases token sampling with a secret key and adds no characters whatsoever; Anthropic announced the same class of watermark for Claude models launched on or after August 2, 2026, explicitly stating that no Unicode characters are embedded. Character cleaning cannot touch either one. For the distinction between the two kinds of marking, read what a Unicode text watermark is.
What cleaning is genuinely good for: formatting hygiene, privacy (hidden characters can carry trackable data), and professionalism. Your text is never sent to a server, so confidential prompts and outputs stay confidential.