U+202F: the space that is not a space
U+202F NARROW NO-BREAK SPACE renders as a slightly slimmer gap than a regular space, which means you will never spot it in a paragraph. To software it could not be more different: one byte (0x20) versus three (e2 80 af). It is correct typography in several languages and pure breakage in every string comparison.
A legitimate character with a real job
French orthography calls for a narrow non-breaking space before tall punctuation, so a question mark never wraps to its own line. German number formats, Russian typography and scientific notation (a thin gap between a number and its unit) all use it too. Any text that passed through serious typesetting, such as academic publishing or a quality newspaper, is full of them on purpose.
That is exactly why AI models picked the character up. Their training data included mountains of professionally typeset text, and in 2025 users started finding U+202F scattered through model output where plain spaces belonged. That fueled a watermarking theory we examined in Does ChatGPT watermark its text? The mundane explanation held up: models reproduce the typography of their sources. The character made headlines again when one model variant emitted so many of them that macOS apps hit text-rendering glitches and developers filed it as a bug.
What it breaks
Everything that compares strings byte for byte:
- Lookups and joins. A price with a narrow no-break space does not equal the same price with a plain one. Spreadsheet lookups, database joins and dedupe passes fail invisibly.
- Search. Find-in-page for
9:41 AMwill not find9:41 AMtyped withU+202Fbefore the AM. - Code and configs. A
U+202Finside a shell command or a YAML file is a syntax error dressed as a space. The error message will point at a line that looks perfect. - Parsing. CSV splitting, fixed-width formats, and regex
\sassumptions all wobble, because some engines match it and some contexts do not.
Its cousin U+00A0, the ordinary non-breaking space, causes the same breakage and is far more common: every on the web becomes one when you copy.
The right way to handle it
Blanket destruction is wrong. A French writer's punctuation spacing is not junk, and a cleaner that flattens it corrupts correct writing. The right policy is locale-aware normalization: replace space impostors with a plain space where they are noise, keep them where the language genuinely uses them.
If you just need to check one suspicious string right now, a hex dump settles it. U+202F shows up as e2 80 af, and there are three other ways to see it depending on where the text lives.
A space should be a space. When it is not, you deserve to know, and the clipboard is the right place to find out.
Text cleaning is coming next to tdy.
tdy is a Mac menu-bar app that already tidies every link you copy. Normalizing space impostors on copy, with the languages that need them left alone, is the next upgrade. One email when it ships, nothing else.
Join the launch list