Skip to content
Ghostchars

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
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

Before12U+2009345
After12 345

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.

Check your own textAll characters