The Unicode codespace is the set of numbers that can ever be codepoints: every integer from U+0000 to U+10FFFF, which is 1,114,112 values. That ceiling will not move. It is fixed by UTF-16, which can reach exactly this far with a surrogate pair and no further, and the other encoding forms were limited to the same range so that every encoding can represent every codepoint. There is no U+110000: a search for it, or a “character” beyond it, is always an error.
Seventeen planes
The codespace is divided into 17 planes of 65,536 codepoints each. The first four hex digits of a six-digit codepoint are the plane number: U+1F600 is in plane 1, U+2A6D6 in plane 2. Plane 0, the Basic Multilingual Plane, holds everything that fits in four hex digits and was the whole of Unicode until version 2.0. Planes 4 to 13 are still completely empty. Each plane is further divided into named blocks.
| Plane | Range | Name | Blocks | Characters | Contents |
|---|---|---|---|---|---|
0 | U+0000–U+FFFF | Basic Multilingual Plane (BMP) | 164 | 55,591 | Almost every modern script, punctuation, most symbols, the first CJK ideographs and the surrogate range. |
1 | U+10000–U+1FFFF | Supplementary Multilingual Plane (SMP) | 161 | 28,444 | Historic scripts, musical and mathematical notation, and nearly all emoji. |
2 | U+20000–U+2FFFF | Supplementary Ideographic Plane (SIP) | 7 | 61,495 | Rare and historic CJK ideographs (Extensions B–F and I). |
3 | U+30000–U+3FFFF | Tertiary Ideographic Plane (TIP) | 2 | 9,131 | Further CJK ideographs (Extensions G and H). |
4 | U+40000–U+4FFFF | Unassigned | 0 | 0 | No characters assigned yet. |
5 | U+50000–U+5FFFF | Unassigned | 0 | 0 | No characters assigned yet. |
6 | U+60000–U+6FFFF | Unassigned | 0 | 0 | No characters assigned yet. |
7 | U+70000–U+7FFFF | Unassigned | 0 | 0 | No characters assigned yet. |
8 | U+80000–U+8FFFF | Unassigned | 0 | 0 | No characters assigned yet. |
9 | U+90000–U+9FFFF | Unassigned | 0 | 0 | No characters assigned yet. |
10 | U+A0000–U+AFFFF | Unassigned | 0 | 0 | No characters assigned yet. |
11 | U+B0000–U+BFFFF | Unassigned | 0 | 0 | No characters assigned yet. |
12 | U+C0000–U+CFFFF | Unassigned | 0 | 0 | No characters assigned yet. |
13 | U+D0000–U+DFFFF | Unassigned | 0 | 0 | No characters assigned yet. |
14 | U+E0000–U+EFFFF | Supplementary Special-purpose Plane (SSP) | 2 | 337 | Tag characters and the variation selectors supplement. |
15 | U+F0000–U+FFFFF | Supplementary Private Use Area-A (PUA-A) | 1 | 0 | Private use: no standard meaning. |
16 | U+100000–U+10FFFF | Supplementary Private Use Area-B (PUA-B) | 1 | 0 | Private use: no standard meaning. |
How the 1,114,112 codepoints are used
In Unicode 16.0 the codespace breaks down as follows. Characters fill about 14% of it; counting private use, surrogates and the other reserved codepoints, about 26% is allocated.
- 154,998 characters
- Graphic and format characters — letters, marks, digits, punctuation, symbols, emoji and invisible format controls. This is the number usually quoted as “the number of characters in Unicode”. 5,185 of them were added in version 16.0.
- 65 control codes
- The C0 and C1 controls inherited from ASCII and ISO 8859, such as U+000A LINE FEED. They are assigned but are not counted as characters.
- 137,468 private-use codepoints
- Reserved for private agreements between applications and fonts: 6,400 in the BMP plus all of planes 15 and 16. See the Private Use Area guide.
- 2,048 surrogate codepoints
U+D800–U+DFFF, reserved so that UTF-16 can encode planes 1–16. They are not characters and are invalid on their own in any encoding.- 66 noncharacters
U+FDD0–U+FDEFplus the last two codepoints of every plane (U+FFFE,U+FFFF,U+1FFFE…U+10FFFF). They are permanently reserved for internal use by software, for example as sentinels, and should not appear in interchanged text.- 819,467 unassigned codepoints
- Available for future versions. New characters are added every year; at the current pace of a few thousand a year, the codespace will last for well over a century.
Why it matters in code
The plane determines the encoded size. Every BMP character takes one 16-bit unit in UTF-16 and one to three bytes in UTF-8; every character in planes 1–16 takes a surrogate pair (two units) in UTF-16 and exactly four bytes in UTF-8. That is why "😀".length is 2 in JavaScript and why MySQL’s legacy utf8 charset, which stores at most three bytes per character, cannot hold emoji — use utf8mb4. See UTF-8, UTF-16 and UTF-32 compared.
When validating input, reject values above 0x10FFFF, lone surrogates, and — depending on your protocol — noncharacters. When iterating over text, step by codepoint (or better, by grapheme cluster) rather than by 16-bit unit.
Further reading
- All 338 blocks — the named ranges inside each plane.
- Surrogate pairs — how UTF-16 reaches planes 1–16.
- The Private Use Areas — planes 15 and 16 and the BMP’s U+E000–U+F8FF.
- What is Unicode? — the standard in one page.
- Codepoint converter — convert between U+XXXX, decimal and the character.