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- Category
- Private-use characters
- 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
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.