Exotic spaces
GENERAL PUNCTUATION SPACES (U+2000–U+200A)
Eleven typographic spaces of fixed width: en quad, em quad, en space, em space, three-per-em, four-per-em, six-per-em, figure space, punctuation space, thin space and hair space.
- Range
U+2000–U+200A- Category
- Exotic spaces
- Removed by default
- No
- Governing option
- Spaces
-s - Can be load-bearing
- No
Where it comes from
Typesetting and design tools, where a specific width is needed: a figure space to align numbers in a table, a thin space inside an abbreviation, a hair space to nudge two glyphs apart. They also arrive with copy-paste from PDFs and from designed web pages.
Why it matters
Eleven different codepoints that all render as some amount of blank. Search, tokenisation and comparison see eleven distinct characters; a reader sees a space that is slightly the wrong width, if that.
Before and after
A thin space grouping digits — correct typography, and not the space key.
The character is shown as a labelled chip so you can see where it sits. In your text it draws nothing at all.
When it is legitimate
In typeset material, constantly — U+2007 FIGURE SPACE is exactly as wide as a digit and is the correct way to align a column of numbers.
How to remove it
Turn on Spaces (`-s`) and every one of them becomes an ordinary space. That flattens deliberate typography, which is why it is not on by default.
Is it an AI watermark?
Not a watermark
No. These come from typesetting tools and from copying designed text. A thin space is evidence of a designer or a PDF, not of a model.
No connection to machine-generated text. It comes from software, from a keyboard, or from a person.
Questions
Which codepoints are in this block?
U+2000 through U+200A: EN QUAD, EM QUAD, EN SPACE, EM SPACE, THREE-PER-EM SPACE, FOUR-PER-EM SPACE, SIX-PER-EM SPACE, FIGURE SPACE, PUNCTUATION SPACE, THIN SPACE and HAIR SPACE.
Is U+200B in this range?
It is the next codepoint along, but it is not a space separator — it has zero width and is a format character, so it is removed by the default pass instead of being normalised.
Check your own text
Paste anything into the cleaner to see every hidden character it contains, with position, codepoint and what happens to each one. Nothing is uploaded.