Unicode and the Universal Coded Character Set
In the early days of computing, different software vendors used various legacy character encodings. This often led to a phenomenon known as mojibake, where text was rendered as a garbled mess of symbols because the receiving system used a different encoding map than the sender. To solve this, the Unicode Consortium and ISO/IEC JTC 1/SC 2/WG 2 collaborated to create the Universal Coded Character Set (UCS), officially designated as ISO/IEC 10646.
The UCS is an international standard that maps characters—discrete symbols used in natural languages, mathematics, music, and other domains—to unique, machine-readable data values. By providing a universal map, the UCS allows computer software to interoperate and transmit text strings across different platforms and languages simultaneously without confusion.

Key Facts
- Total Capacity: Over 1 million potential characters.
- Code Point Range: Integers from 0 to 1,114,111.
- Current Status (Unicode 17.0): 303,808 code points are allocated, with 159,866 assigned to specific characters.
- Structure: Divided into 17 planes, each containing up to 65,536 characters.
- Compatibility: The first 128 characters are identical to ASCII, and the first 256 match ISO 8859-1.
The Architecture of Unicode
Code Points and Planes
Every character in the UCS is represented by a code point, which is a unique integer used by text processing software. To organize these millions of possibilities, Unicode divides the set into 17 planes. As of 2025, characters have only been allocated in seven of these planes; the rest are reserved for future use.
Planes are identified by the leading hexadecimal digits of a code point. For example, U+24321 is in Plane 2, while U+4321 is in Plane 0 (the Basic Multilingual Plane). Each plane can hold a maximum of 65,536 code points (hexadecimal 0000 to FFFF).
Blocks and Categories
Within planes, characters are grouped into blocks. While blocks often group characters by script, a single script may span multiple blocks, and a block may contain characters from different scripts. The UCS currently identifies 172 scripts, ranging from modern to ancient.
Beyond scripts, the UCS includes specialized categories such as chess symbols and various number forms. For fractions, Unicode prefers a flexible composition method using the fraction slash (U+2044) combined with numbers, though 19 precomposed fraction characters also exist for convenience.

Technical Implementation and Special Characters
Surrogates and UTF-16
To handle characters outside the Basic Multilingual Plane (BMP) using 16-bit encoding (like UTF-16), Unicode uses surrogates. These are pairs of 16-bit words—one "high" surrogate and one "low" surrogate—that together point to a single character in the supplementary planes. This allows a 16-bit system to address over a million characters.
The Byte Order Mark (BOM)
The Byte Order Mark is used to determine the endianness (byte order) of a text stream. A sequence of 0xFE 0xFF typically indicates UTF-16 big-endian, while 0xFF 0xFE suggests UTF-16 little-endian. This prevents the system from misinterpreting the data stream.
Mathematical and Formatting Invisibles
Unicode includes several "invisible" characters to assist in precise formatting. In mathematics, the Invisible Separator (U+2063), Invisible Times (U+2062), and Function Application (U+2061) allow for implied operations without visible glyphs. Additionally, bidirectional formatting characters (such as the Right-to-Left Mark) ensure that mixed-direction text (e.g., English and Arabic) renders correctly.

Advanced Text Handling
Graphemes vs. Code Points
It is important to distinguish between a character and a code point. A single visual character (a grapheme) can sometimes be represented by multiple code points. For example, the letter Ä can be a single code point (U+00C4) or a sequence of two: the letter A (U+0041) followed by a combining diaeresis (U+0308).
Whitespace and Joiners
Unicode defines 25 whitespace characters as of version 17.0. These include standard spaces and specialized separators like the No-Break Space (U+00A0), which prevents a line break, and the Zero Width Space (U+200B), which allows a line break without adding visual space.

Private Use and Noncharacters
Certain areas are reserved for specific internal purposes:
- Private Use Areas (PUA): Ranges like U+E000 to U+F8FF are reserved for organizations to define their own characters.
- Noncharacters: 66 code points are permanently reserved for internal software use and will never be assigned to a character. For instance, U+FFFE is often used to detect incorrect byte order.
Summary of Unicode Structure
| Component | Description | Key Detail |
|---|---|---|
| Code Point | Unique integer identifier | Range: 0 to 1,114,111 |
| Plane | Large groupings of code points | 17 total planes |
| BMP | Basic Multilingual Plane | Plane 0; contains most common characters |
| Surrogates | Pairs used for non-BMP characters | Enables 16-bit encoding for all planes |
| PUA | Private Use Area | Reserved for custom character definitions |
Frequently Asked Questions
What is the difference between a character and a code point?
A code point is a unique numerical value assigned by the Unicode standard. A character (or grapheme) is the actual symbol seen by the user. Some characters can be represented by a single code point, while others are formed by combining multiple code points.
What is mojibake?
Mojibake occurs when text is decoded using the wrong character encoding, resulting in a sequence of incorrect and often nonsensical symbols.
How does the fraction slash work?
The fraction slash (U+2044) is designed to be combined with numbers to synthesize a fraction. While some fonts provide precomposed fraction glyphs, the slash allows for an infinite variety of fractions to be created dynamically by the layout software.
What are noncharacters in Unicode?
Noncharacters are 66 specific code points that are guaranteed to never be assigned to an actual character. They are reserved for internal use by software developers to signal specific conditions, such as detecting incorrect byte order.
Why are there different types of spaces in Unicode?
Different spaces serve different typographic and technical purposes. Some, like the No-Break Space, prevent words from being split across lines, while others, like the Zero Width Space, allow line breaks without adding visual distance between characters.