Invisible Characters in ChatGPT Text: We Tested 8 AI Models (and the textGrain Watermark)
Our own test of 8 AI models (GPT-5.6, o3, Claude, Gemini, DeepSeek, Grok, Mistral): do they insert invisible characters, how OpenAI’s textGrain watermark works, and a 5-minute pre-publishing checklist.
ChatGPT and other AI models do not put invisible characters into their text today: in our test, 8 models produced 242 answers, 264,831 characters, without a single U+200B, U+202F or soft hyphen. The story about "hidden space watermarks" was born in spring 2025 and has lived apart from the facts ever since. OpenAI's actual watermark arrived only on 5 October 2026. It is called textGrain and it hides in word choice, not in characters, so no "Unicode cleaner" can see or remove it. Below are our measurements, OpenAI's numbers on how robust the mark is, and a checklist for text before publishing.
Key takeaways
- No invisible characters. 242 answers from eight models (GPT-5.6 Luna, GPT-4o, o3, Claude Sonnet 5.5, Gemini 3.8 Flash, DeepSeek V4.1 Flash, Grok 4.7, Mistral Large 4): zero Unicode format characters and zero non-standard spaces. That includes 63 answers to tasks with numbers, currencies and dates, exactly where U+202F used to be found.
- OpenAI does have a watermark, but it lives in the words. textGrain slightly shifts word choice and forms a statistical pattern. According to OpenAI, unedited text is flagged about 92% of the time; after replacing 25% of the words with synonyms, only 17%.
- What actually gives AI text away. Em dashes in English, curly quotes, leftover Markdown. None of it is proof.
- So where do invisible characters in your text come from? Mostly from copy-paste: web pages, messengers, word processors, emoji. You can find and remove them in a minute.
Where the "hidden spaces" story came from
In April 2025 Rumi, a US startup building tools for universities, reported that text from o3 and o4-mini contained the narrow no-break space U+202F. It looks like an ordinary space but has a different code, so a simple search finds it. The news quickly turned into "OpenAI secretly marks your text", and dozens of "ChatGPT watermark removers" appeared online.
We found no official OpenAI statement that this was a watermark. There is a more mundane explanation: typographic rules put a narrow no-break space between a number and its unit, between initials, and before certain punctuation in some languages. The model could have learned this from its training text. Rumi itself described the finding as most likely temporary.
We tested o3 separately: 19 answers, including tasks with amounts, percentages and dates. U+202F did not appear once. Whatever it was in spring 2025, it is not there now.
What changed in October 2026: the textGrain watermark
On 5 October 2026 OpenAI announced textGrain, a watermark for text. The main points of the announcement (as reported by BleepingComputer the same day):
- How it works. The model slightly shifts its choice between suitable words and word pieces. The result is a statistical pattern that readers do not notice and a detector can find. The mark adds no hidden characters, invisible spaces or unusual punctuation, so nothing "extra" travels with a copy-paste.
- Where it is on. In ChatGPT and Codex for users in the European Union on all plans, rolling out over several weeks. In the API it is opt-in worldwide, from project or organization settings, and off by default.
- Who can check it. The detector is given only to approved researchers and expert organizations, on application. There is no public "textGrain check", and any service promising one today is not telling the truth.
- What the mark does not prove. OpenAI states plainly that the absence of a detected watermark does not prove human authorship. A detected mark also does not say who generated the text or how much it was edited afterwards.
The robustness numbers are honest and telling. For a 400-token answer (about 300 words) the mark is detected roughly 92% of the time. Replacing 10% of the words with synonyms lowers detection to 66%, replacing 25% to 17%. Short, heavily rewritten and translated texts are hard to check, OpenAI says, and in mathematics, where the model has little freedom in word choice, the mark is weaker.
Google takes a similar approach: SynthID Text adds a statistical mark to word choice, and Google open-sourced it in 2024. Why such marks appear now, and in the EU first: the EU AI Act (Article 50) requires providers of generative systems to mark synthetic content in a machine-readable way, and coverage of the textGrain launch links it to exactly that.
Our test: how we checked
On 26 October 2026 we gave eight models identical tasks and counted every unusual character in the answers. Models were called via API (OpenRouter), temperature 0.7, no system instructions:
- Models: GPT-5.6 Luna, GPT-4o and o3 (OpenAI), Claude Sonnet 5.5 (Anthropic), Gemini 3.8 Flash (Google), DeepSeek V4.1 Flash, Grok 4.7 (xAI), Mistral Large 4.
- Tasks: six typical website and email texts (a blog intro, advice on choosing hosting, a product description, an email to a client, tips on meta descriptions, pros and cons of remote work) in Russian and English, each run twice. Plus four tasks with numbers, currencies, units and dates, where a narrow space would show up first.
- What counted as invisible: all Unicode format characters (category Cf: U+200B, U+200C, U+200D, U+2060, U+FEFF, bidirectional controls and others), the soft hyphen U+00AD and every space other than the regular one: no-break U+00A0, narrow U+202F, thin U+2009 and the rest.
- "Typography" was counted separately: em dashes, curly quotes, Markdown.
In total, 242 answers (most of Qwen's answers came back empty, so we dropped it; for o4-mini the provider returned an error). It is not a million-sample study, but it is enough for the question "do models insert invisible characters": if a character appeared in even one answer in twenty, we would have seen it with a probability above 99.9%.
Result 1: no model inserts invisible characters
Zero out of 242. Not one zero-width character, not one soft hyphen, not one no-break or narrow space, including in 63 answers with amounts ("$6.2 million", "4,5 млн долларов"), percentages, temperatures and dates. No model, o3 included, adds "typographically correct" spaces on its own.
An important caveat: we checked API answers, i.e. the text a model returns to a developer. A web chat adds formatting on top, and after that everything depends on where and how you paste. That step, not the model itself, is where "invisible" things most often enter a text. More on that below.
Result 2: the real tells are visible
If anything gives AI text away, it is visible habits. The most discussed one is the em dash.
The key is to compare within one language. In Russian the long dash is ordinary punctuation, any competent author uses it, so 58% of Russian answers with a dash mean nothing. In English the em dash is rarer, and the spread between models is clear: from 0% for Claude Sonnet 5.5 to 44% for Mistral Large 4 and o3. Still, it is style, not proof: plenty of human writers love the em dash.
The second habit is curly quotes in English text (“…” instead of "…"). GPT-5.6 Luna uses them in 10 answers out of 16, o3 in 7 out of 9, Claude Sonnet 5.5 never. The third is Markdown.
Asterisks and hashes are harmless by themselves, but if text is copied from an API response or a middleman service rather than from the chat window, they stay in the text as is: a "**Important:**" in the middle of a paragraph gives generation away better than any detector.
So where do invisible characters in real texts come from?
Our hidden character detector checked more than 600 texts between 13 and 26 October alone, and unusual characters turn up in real texts regularly. Judging by our test, though, they arrive not from the model but along the way:
| Character | Code | Where it usually comes from | What it breaks |
|---|---|---|---|
| No-break space | U+00A0 | Copying from web pages ( ), Word and Google Docs, autocorrect before punctuation | Usually nothing; breaks search and string comparison |
| Zero-width space | U+200B | Site layouts (breaking long words), some messengers and CMSs | A word looks the same but is not found by search; in a page address it creates a different URL |
| Zero-width joiner | U+200D | Multi-part emoji (families, flags, professions) | Remains as a "tail" if an emoji is not deleted completely |
| Direction marks | U+200E, U+200F, U+202A–U+202E | Texts mixing left-to-right and right-to-left languages | Odd character order; break copied URLs and code |
| Byte order mark | U+FEFF | Files saved as UTF-8 with BOM (old Windows Notepad, exports) | Breaks JSON, CSV and configs when at the start of a file |
| Soft hyphen | U+00AD | Automatic hyphenation in editors and layouts | Splits a word for search and word counts |
More on each character and how to find it by hand in our guide "Hidden watermarks and invisible characters in text", and a comparison of free tools in "Best free invisible character detectors and removers".
Does it matter for SEO?
For rankings, the fact of generation is not decisive. Google's guidance on AI content, updated on 1 October 2026, focuses elsewhere: content must be helpful, and facts in AI-generated text must be checked by a human before publishing, metadata included. Google has not said that Search looks for invisible characters or AI watermarks in text.
Invisible characters do harm in a different, purely technical way:
- In titles and meta tags a zero-width character makes a string "different": duplicates are not found, site search fails, and copying from the results yields junk.
- In URLs and anchors U+200B becomes
%E2%80%8B, and the link leads to a different address, usually a 404. - In markup and files a BOM at the start of JSON-LD, a CSV feed or a config breaks parsing entirely.
- In article text soft hyphens and zero-width spaces get in the way of on-page search, word counts and plagiarism checks.
So clean text not "from ChatGPT watermarks" but as routine hygiene before publishing, whoever wrote it.
Checklist: check a text before publishing in 5 minutes
Find invisible characters
Paste the text into the hidden character detector. It shows every unusual character with its code and position, not just "something found".
Remove the junk, keep what is needed
Clean the text with the invisible character remover. A no-break space between a number and its unit ("10 km") is fine, while zero-width spaces and a BOM have no place in web copy.
Strip leftover Markdown
Search the text for **, ## and lines starting with - . If the text goes into your CMS as a plain paragraph, the markup stays visible.
Align typography with your style guide
Decide once for all texts: which quotes, which dash, whether you use no-break spaces. Do not strip dashes just because "AI uses them": that removes style, not a fingerprint.
Fact-check by hand
This is what Google expects from AI-assisted text: numbers, dates, names and quotes are checked against the original source before publishing. No detector replaces this step.
What not to do
If you need to check an image, video or audio file, that is a different story: C2PA metadata and SynthID apply there. We covered it in "AI watermark detectors: SynthID, C2PA and metadata".
FAQ
Does ChatGPT add invisible characters to text?
In our test on 26.10.2026, no: 242 answers from eight models, including GPT-5.6, GPT-4o and o3, without a single zero-width character or special space. OpenAI's textGrain watermark works through word choice and, according to the company, adds no characters.
Can I check a text for the textGrain watermark?
Not yet. OpenAI gives its detector only to approved researchers and organizations. Services that promise such a check actually look for invisible characters or score writing style.
Where do U+200B and U+00A0 in my text come from if I did not type them?
Usually from copy-paste: web pages, messengers, Word and Google Docs. U+200D comes with multi-part emoji. You can find and remove them with a free hidden character detector.
Does the em dash give away AI text?
Not on its own. In our test models used it in 23% of English answers and 58% of Russian ones, where the dash is ordinary punctuation. Some models use it far more than others, but it is a stylistic habit that many people share, not proof.
Does Google demote AI-written content?
Google evaluates helpfulness and accuracy, not how content was made. Since 1 October 2026 its guidance explicitly says that facts in AI-generated text should be checked by a human before publishing. Google has not said it looks for invisible characters or AI watermarks.
Sources: PromoPilot test, 26.10.2026 (8 models, 242 answers via OpenRouter API); BleepingComputer, "OpenAI is adding invisible watermarks to ChatGPT and Codex text in the EU", 05.10.2026; OpenAI Help Center, "Provenance signals in OpenAI-generated content"; reports on Rumi's finding, April 2025; Regulation (EU) 2024/1689 (AI Act), Article 50; Google Search Central guidance on AI-generated content, revision of 01.10.2026. Prepared by the PromoPilot team.