Skip to main content

Hidden Characters

ChatGPT Hidden Characters: What They Are and How to See Them

CleanPastedText editorial · Updated

Text workbench

Try it on your text

Cleaning mode

Removes hidden characters and standardizes AI-style punctuation.

Try a real example

Each sample contains a problem you cannot see.

Original

Pasted text

0 chars · 0 words

Cleaned

Ready to copy

0 changes

Text stays in this browser

Same words · No AI rewriting · No content logging

Which hidden characters show up in ChatGPT output?

Four families of characters account for nearly every "weird character" found in ChatGPT and other AI-chatbot text: special spaces, zero-width characters, smart typography, and markdown residue. They are why search can't find a phrase you can plainly see, why spellcheck flags a correctly spelled word, and why a pasted code snippet suddenly won't compile. Each has a precise Unicode identity — and knowing the code point is what turns "my text feels off" into a fixable diagnosis.

CharacterCode point(s)What it isTypical source
Narrow no-break spaceU+202FA thin space that forbids a line break at its positiono3/o4-mini output (April 2025); French typography
No-break spaceU+00A0A normal-width space that glues neighboring words to one lineChat interface HTML ( ), Word
Thin spaceU+2009A narrower-than-normal typographic spaceRendered web pages, typeset documents
Zero width spaceU+200BAn invisible character marking a legal line-break pointWeb layout pipelines, copy-paste
Zero width joiner / non-joinerU+200D / U+200CInvisible controls for how adjacent characters joinEmoji sequences, Arabic/Indic scripts
Byte order markU+FEFFA file-encoding marker that becomes a ghost character in textFiles, feeds, exports
Curly quotesU+2018, U+2019, U+201C, U+201DTypographic quotation marks, distinct from straight ' and "The model's trained typographic style
Em dashU+2014The long dash used to set off clausesThe model's trained typographic style

Two rarer ranges deserve their own definitions, because they matter for security rather than formatting. Unicode tag characters (U+E0000–U+E007F) are an invisible duplicate of the ASCII alphabet, originally designed for language tagging and now abused to hide instructions inside ordinary-looking text. Variation selectors (U+FE00–U+FE0F) are invisible characters that modify how the preceding character renders — 256 values that can also smuggle one hidden byte apiece. Neither belongs in a chat answer.

The complete reference of every range we detect — including tag characters and variation selectors — lives in the invisible Unicode characters list.

Why does ChatGPT output contain special characters?

Four different mechanisms put them there — and only one ever looked like deliberate marking:

1. Model quirks

Days after o3 and o4-mini launched on April 16, 2025, Rumi documented U+202F characters in their longer outputs. OpenAI called it "a quirk of large-scale reinforcement learning", not a watermark, and the characters vanished within days — but the episode proved model output can carry invisible Unicode.

2. Trained typography

Wikipedia's "Signs of AI writing" guide documents LLMs' habit of curly quotes (U+2018, U+2019, U+201C, U+201D) and heavy em dash use — while cautioning these also appear in professionally typeset human text.

3. The chat window's HTML

What you copy is a rendered web page, not raw model output. No-break spaces and thin spaces used by the interface's layout ride into your clipboard — a pipeline artifact no model settings can prevent.

4. Markdown residue

ChatGPT writes markdown: **asterisks**, ## headings, backticks, and list markers. Paste into a non-markdown editor and the symbols appear literally — visible clutter that reads as "special characters" even though it's plain ASCII.

How do I see hidden characters?

The fastest way is a scanner that names every code point — like the tool at the top of this page — but every serious editor can also make them visible:

  • This tool's detection report. Paste text above and get each hidden character by name, code point, and count — then optionally remove them in one click, or use the check-only watermark checker.
  • Microsoft Word: Show all (Ctrl+Shift+8). The ¶ button reveals formatting marks: regular spaces appear as small raised dots, while no-break spaces appear as degree-sign-like ° circles. A line of ° marks where dots should be means special spaces. Zero-width characters get no mark at all, so Word alone can't give the full picture.
  • VS Code. Set editor.renderControlCharacters to true, then open Find (Ctrl+F), toggle regex mode, and search [\u00A0\u202F\u2009\u200B-\u200D\u2060\uFEFF] to jump through every special space and zero-width character in the file.
  • Command line. grep -nP '[^\x00-\x7F]' draft.txt prints every line containing a non-ASCII character; grep -oP '\x{202F}' draft.txt | wc -l counts U+202F occurrences; and iconv -f UTF-8 -t ASCII draft.txt > /dev/null stops with an error at the first non-ASCII byte, confirming a file is pure ASCII when it exits silently.

Are hidden characters proof text is AI-generated?

No. Hidden characters are evidence of a text's pipeline, not its author. Word, Google Docs, PDFs, email clients, and web CMSs insert no-break spaces, soft hyphens, and zero-width characters constantly — which is why they turn up in text typed entirely by humans. Originality.ai's own testing found that the LLMs it tested did not inject invisible characters — they mostly arrive via tooling — and Wikipedia's AI-writing guide makes the same caution about curly quotes, which Chicago-style publishing has used for a century. The April 2025 U+202F episode is the exception that proves the rule: a real, documented model artifact that OpenAI removed within days.

As of August 2026, no mainstream chatbot is known to embed hidden characters deliberately. The AI text watermarks that actually exist — Google's SynthID-Text in Gemini, and the watermark Claude models carry since August 2, 2026 — are statistical, woven into word choice, and add no characters at all. So a character scan tells you about copy-paste history and hygiene; it was never going to be an AI-authorship test, in either direction.

Practical takeaway: treat a hidden character as a prompt to check where the text has been, not as a verdict. And before you publish or submit, strip the ambiguity itself — remove the invisible characters so there's nothing to misread. Hidden characters are only one of the layers that travel with AI output — what's inside AI text covers the other three.

Common questions

Frequently asked questions

What hidden characters does ChatGPT put in text?

The best-documented is the narrow no-break space (U+202F), which appeared in o3 and o4-mini output in April 2025 before OpenAI removed it within days, calling it 'a quirk of large-scale reinforcement learning'. Beyond that episode, copied ChatGPT text routinely carries no-break spaces (U+00A0) and thin spaces from the chat window's HTML, occasionally zero-width characters (U+200B, U+200C, U+200D), and visible tells like curly quotes (U+2018, U+2019, U+201C, U+201D) and em dashes (U+2014).

What is a narrow no-break space (U+202F)?

A narrow no-break space (U+202F) is a thinner-than-normal space that forbids a line break at its position. It is standard French typography — used before ! ? : ; and inside numbers like 10 000 — but in English text it almost always arrives as an artifact of AI output or typeset documents, which is why it became known as a ChatGPT fingerprint in April 2025.

How do I see hidden characters in Microsoft Word?

Turn on formatting marks with the ¶ button or Ctrl+Shift+8. Regular spaces render as small raised dots, while no-break spaces render as degree-sign-like circles — so a sentence full of ° marks instead of dots means special spaces. Word has no marks for zero-width characters, though, so a code-point scanner is still needed for a complete picture.

How do I find hidden Unicode characters in VS Code?

Open Find (Ctrl+F), enable regex mode (the .* icon), and search [\u00A0\u202F\u2009\u200B-\u200D\u2060\uFEFF] to step through every special space and zero-width character. Also set editor.renderControlCharacters to true so control characters show inline. VS Code will highlight each match even though the characters themselves have no glyph.

Are invisible characters proof that text is AI-generated?

No. Word, Google Docs, PDFs, and web CMS pipelines insert the same characters, and Originality.ai's testing found the LLMs it tested did not inject invisible characters at all — they mostly arrive via tooling. Treat a hidden character as a reason to inspect the text's history, not as a verdict on authorship.

Continue reading

Related guides & tools