The ChatGPT Hidden Characters Story: What the Narrow No-Break Space Was
Short answer: for a few days in April 2025, OpenAI’s o3 and o4-mini inserted U+202F, the narrow no-break space, into longer responses. OpenAI called it a quirk of large-scale reinforcement learning, not a watermark, and the characters stopped appearing within days. A character that a find-and-replace removes was never a watermark, and current ChatGPT models do not emit it.
- Type
- None confirmed
- Hidden characters
- No
- Official detector
- Unavailable: Unavailable
- Locally removable
- Yes, in part
Every few months someone rediscovers a stray character in AI output and calls it a watermark. The April 2025 ChatGPT episode is the one that stuck, so it deserves an accurate retelling: what was seen, what the character is, why it was not a watermark, and why the story still shapes how people search for one.
What was observed
In mid-April 2025, shortly after OpenAI released o3 and o4-mini, a researcher at Rumi noticed that longer responses from those two models contained a character that looked like an ordinary space but was not one. Pasting the text into a code editor showed it: U+202F, the narrow no-break space, appearing between words in long-form prose where a normal space belonged.
It was consistent enough to be interesting. It appeared in extended responses, it did not appear in output from the older models, and it survived a copy and paste into a document. The Rumi write-up, "New ChatGPT models seem to leave watermarks on text", laid out the evidence carefully and raised the question in its title rather than asserting an answer.
What U+202F is
The narrow no-break space is a legitimate typographic character. French punctuation uses it before question marks, exclamation marks and colons. Several locales use it as a thousands separator. It exists so that a line never breaks in the middle of a number or before a closing mark, and it renders a little narrower than a normal space.
That is why it is an odd candidate for a watermark. It is not invisible in the way a zero-width space is; it takes up width. It is not rare; a lot of French and Swiss text is full of it. And it is not sticky; a single find-and-replace removes every one of them.
Why it looked like a watermark
The pattern had three properties that watermark stories always have. It was model-specific, showing up in the two new models and nowhere else. It was invisible to a casual reader. And it was systematic rather than random.
Those three things are also the properties of a training artifact, which is what it turned out to be.
Why it was not one
OpenAI's explanation was that the characters were a quirk of large-scale reinforcement learning, and within days the models stopped emitting them. No detector was ever offered, no key existed, and nobody at OpenAI described it as intentional.
The stronger argument does not need OpenAI's statement. A watermark that a find-and-replace removes is not a watermark. The point of the real schemes, Google's SynthID Text and the mark Anthropic introduced in August 2026, is that the signal lives in which of several good words the model chose, so that removing it means rewriting the text. Anthropic's design principles put it in one sentence:
"Nothing is added to the text and there are no hidden characters."
OpenAI, for its part, has never deployed a text watermark at all. The current facts are that it built a method in 2024 and left it on the shelf.
The lasting damage
The episode set the public expectation that an AI watermark is a stray character you can find and strip. That expectation is why, when Anthropic announced a real watermark for Claude in August 2026, dozens of "Claude watermark removers" appeared within a week, every one of them scanning for hidden Unicode that Anthropic had explicitly said it does not use. That story is the direct descendant of this one.
It also produced a durable search habit. People still type "chatgpt hidden characters" and "remove hidden characters from chatgpt text" every day, well over a year after the quirk was patched, and most of what they find is a cleaner that implies it is defeating something.
What to do if you find U+202F today
It almost certainly did not come from ChatGPT. The usual sources are a paste from a web page or a PDF, text that passed through Word with French or Swiss typography settings, or a document that was copy-edited by someone who uses the character correctly.
DetectMark flags U+202F when it finds it, but it does not strip it by default, because it is real typography in real languages. The invisible character remover reports it with its code point and position, and replacing it with an ordinary space is an opt-in click. The step-by-step guide covers the whole cleanup.
Check a paste for hidden characters
Runs locally · nothing uploaded
FAQ
The narrow no-break space, a legitimate typographic character used in French punctuation and as a thousands separator in several locales. It renders slightly narrower than a normal space and prevents a line break at that position.
No. OpenAI described it as a quirk of large-scale reinforcement learning, no detector or key existed, and a single find-and-replace removed every instance. Real text watermarks live in word choice, not in characters.
Not as a pattern. The quirk was patched in April 2025. Hidden characters in a ChatGPT paste today almost always come from the copy itself, from a web page, or from an editor the text passed through.
It set the expectation that an AI watermark is a stray character you can strip. When Anthropic announced a real watermark for Claude in August 2026, dozens of removers appeared that scan for hidden Unicode Anthropic explicitly does not use.
Only if it is unwanted. It is correct typography in French and several other languages, so DetectMark flags it and makes replacing it with an ordinary space an opt-in step rather than a default.