Behind every character on your screen is a number, and the story of how those numbers are assigned explains a surprising amount about why text sometimes breaks. From the 1960s simplicity of ASCII to the universal ambition of Unicode, this guide traces how computers came to represent the writing of the entire world.
ASCII: 128 characters
ASCII, from the 1960s, assigned a number from 0 to 127 to each English letter, digit, punctuation mark and a set of control codes. Seven bits covered everything it needed. It was simple and effective — as long as your text was English. The moment you needed accents, currency symbols or other scripts, 128 slots were nowhere near enough.
The chaos that followed
To fill the gap, dozens of incompatible extensions and regional encodings appeared, each using the same byte values for different characters. A document written in one encoding and read in another turned into gibberish. This fragmentation made truly international text painful and error-prone.
Unicode: one number per character
Unicode ended the chaos with a single, universal scheme: every character in every writing system — past and present, plus emoji — gets a unique number called a code point, written like U+20AC for the euro sign. Unicode defines well over a million possible code points, far more than will ever be needed, so there is room for everything.
Code points vs encoding
A subtle but vital distinction: a code point is the abstract number assigned to a character, while an encoding is how that number is stored as bytes. UTF-8 is the dominant encoding — it stores ASCII characters in one byte and others in two to four, staying backward-compatible with ASCII. So Unicode says which number, and UTF-8 says how to write it down.
The takeaway
ASCII was a brilliant start for English; Unicode is the universal solution for everyone. Use UTF-8 everywhere and the centuries of human writing — and a few thousand emoji — all just work.