The History of ASCII and Its Relationship to Unicode
Before Unicode, before UTF-8, there was ASCII—the American Standard Code for Information Interchange. Published in 1963 and revised in 1967 to its now-standard 128-character form, ASCII shaped every computing standard that followed it. Understanding ASCII's history illuminates why Unicode is designed the way it is, and why UTF-8 was such a clever solution to the encoding transition problem.
ASCII: 128 Characters, Seven Bits
ASCII uses 7 bits to encode 128 characters: 33 non-printing control characters (codes 0–31 and 127), a space, 10 digits, 26 lowercase letters, 26 uppercase letters, and 32 punctuation and symbol characters. The capital A is code 65 (0x41), lowercase a is 97 (0x61), the space is 32 (0x20). This mapping is so deeply embedded in computing that most languages still guarantee these values—Python's ord('A') is 65, JavaScript's 'A'.charCodeAt(0) is 65.
The control characters are a relic of teletype communication: carriage return (CR, U+000D), line feed (LF, U+000A), bell (BEL, U+0007), and others were used to control physical printer hardware. Modern systems use CR, LF, and Tab; the rest are largely historical curiosities. Browse the control characters in the C0 Controls category.
The Extended ASCII Problem
ASCII's 128 characters couldn't represent accented letters needed for French, German, Spanish, or virtually any non-English Western European language. Vendors filled the 128 additional positions available in an 8-bit byte with their own extensions—IBM's code pages, ISO 8859-1 (Latin-1), Windows-1252, and dozens more. A document encoded in Windows-1252 and opened as ISO 8859-1 would display the wrong characters for any code point above 127.
This is the problem Unicode solved. Unicode's first 128 code points (U+0000–U+007F) are identical to ASCII—every ASCII character has the same numeric value in Unicode. The next 128 (U+0080–U+00FF) match ISO 8859-1, easing the transition from Western European encodings. You can see the Basic Latin block's layout—entirely mirroring ASCII—by browsing the blocks catalogue.
UTF-8's Deliberate ASCII Compatibility
Ken Thompson and Rob Pike designed UTF-8 in 1992 specifically to be backward-compatible with ASCII. Any byte value below 0x80 in a UTF-8 stream is the same character as in ASCII. This meant existing ASCII-safe programs, protocols, and tools could handle UTF-8 text without modification. The web's transition to Unicode was made practical by this design decision.