Skip to content
Ghostchars

Private-use characters

PRIVATE USE AREA (U+E000–U+F8FF)

Codepoints Unicode will never assign a meaning to, reserved for private agreements between a font and the software that uses it. U+E000–U+F8FF plus two large supplementary planes.

Range
U+E000–U+F8FF
Removed by default
No
Governing option
Private-use characters --pua
Can be load-bearing
No

Where it comes from

Icon fonts (Font Awesome and its relatives map their glyphs here), Apple and Microsoft logo characters, ConScript encodings for constructed scripts, and text copied out of applications that use a private font.

Why it matters

What one font draws as a chevron, another draws as an empty box, and a screen reader reads as nothing. The meaning lives in the font, so the text is only readable where that font is installed — and a private-use character is an invisible-in-practice channel anywhere else.

Before and after

Beforemenu U+E000
Aftermenu

A private-use codepoint. In the right font it is an icon; everywhere else it is a box or nothing.

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

Inside an application that ships the matching font, and in scholarly encodings of scripts Unicode has not standardised.

How to remove it

Turn on Private-use characters (`--pua`). It is off by default because in an icon-font context these characters are the content.

Is it an AI watermark?

Not a watermark

No. Private-use codepoints come from icon fonts and specialist encodings. Any meaning they carry was agreed between a font and an application, not left by a model.

No connection to machine-generated text. It comes from software, from a keyboard, or from a person.

Questions

Will it break my icons?

Yes, which is why `--pua` is off by default. If your text is UI copy that contains icon-font glyphs, leave it off.

Which ranges count?

U+E000–U+F8FF in the basic plane, plus planes 15 and 16 (U+F0000–U+FFFFD and U+100000–U+10FFFD). Ghostchars detects them by Unicode category, so all three are covered.

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