What is ASCII?
ASCII — American Standard Code for Information Interchange — is a character encoding standard that assigns a unique number to 128 symbols: the 26 uppercase and lowercase Latin letters, digits 0–9, punctuation marks, and 33 non-printable control codes. Every number fits in 7 bits (0–127), making ASCII the most compact practical text encoding ever devised.
Before ASCII, every manufacturer invented its own character codes. IBM's EBCDIC, DEC's SIXBIT, Burroughs' own schemes — machines from different vendors literally could not exchange text. ASCII solved that by giving every character in the English alphabet a single agreed number, globally.
Origins & Predecessors
ASCII did not appear from nowhere. It is the culmination of 125 years of efforts to encode human language for machines, starting with the telegraph.
1838
Morse CodeThe first practical scheme for encoding the alphabet as signals over wire. Variable-length dots and dashes assigned to each letter by frequency of use — E is a single dot, Z is two dashes and two dots. Morse proved that arbitrary symbols could represent language over a channel.
1870
Baudot CodeFrench telegraph engineer Émile Baudot invented the first fixed-length binary encoding: 5 bits per character, 32 possible codes. Operators typed on a 5-key piano-style keyboard. The unit of signalling speed — the baud — is named after him and still used today.
1901
Murray Code (ITA-1)Donald Murray adapted Baudot's system for typewriter-style keyboards and punched paper tape, adding control codes like CR (carriage return) and LF (line feed) — two characters that survive verbatim in ASCII and still end lines in Windows files today.
1930
ITA-2 / CCITT-2The International Telegraph Alphabet No. 2 — a standardised 5-bit code adopted globally for telex and teletype (TTY) machines. It was the dominant encoding for the next 30 years and the direct predecessor ASCII was designed to replace and extend.
1960
Bob Bemer proposes a universal codeIBM engineer Robert W. Bemer — later called the "father of ASCII" — proposed that the industry standardise on a single character encoding. He had noticed IBM alone was using nine incompatible codes across its product line. He submitted a proposal to the American Standards Association (ASA).
1963
ASCII 1.0 published (ASA X3.4-1963)The first version of ASCII was published in June 1963. It had 128 characters in a 7-bit scheme but notably lacked lowercase letters — only uppercase A–Z, digits, punctuation, and 33 control codes. Early computing used uppercase-only terminals, so this was not yet a problem.
1967
Lowercase added (USAS X3.4-1967)The 1967 revision added lowercase a–z and settled the final character assignments that remain unchanged today. This is effectively the ASCII that every computer still uses. The backtick, tilde, and pipe characters were added in this revision.
1968
US President mandates ASCIIPresident Lyndon B. Johnson signed a memorandum requiring all computers purchased by the federal government to support ASCII. This single executive order accelerated adoption across the entire US tech industry, effectively making ASCII the standard practically overnight.
1986
Final revision (ANSI X3.4-1986)The last update to ASCII as an independent standard. It was republished as ISO 646 for international use. By this point ASCII was so deeply embedded in computing infrastructure that no further changes were practical — every change would break billions of files and programs.
1991
Unicode 1.0 releasedUnicode was designed to be a strict superset of ASCII — code points 0–127 in Unicode are identical to ASCII. This ensured that all ASCII text was automatically valid Unicode, allowing a seamless migration path. ASCII became the foundation layer of the global text encoding system.
Today
Still the backbone of computingASCII values are hard-coded into the C language, every network protocol header, every source file, every config file. UTF-8 — the encoding of over 98% of the web — is specifically designed so that any pure ASCII file is valid UTF-8 with zero modification.
How ASCII Shaped Technology
🌐
The Internet & Network Protocols
HTTP, SMTP, FTP, DNS, and IRC are all ASCII-based protocols. HTTP request headers are plain ASCII text: GET / HTTP/1.1. SMTP email headers are ASCII. This made early network programming trivially debuggable with nothing more than a terminal — a design principle that shaped the open, inspectable nature of the web.
💻
The C Programming Language
C's char type is simply a number that maps to ASCII. The expression 'A' + 32 equals 'a' because ASCII places uppercase and lowercase exactly 32 apart. Case conversion, string parsing, and lexical analysis in C all rely directly on ASCII arithmetic — patterns that survive in every C-derived language.
Unix was built entirely on ASCII text pipes. Ken Thompson and Dennis Ritchie designed the "everything is a text stream" philosophy around ASCII, enabling the composable tool ecosystem (grep, sed, awk) where any program's ASCII output could feed any other's input. The Unix terminal is still an ASCII (or UTF-8) stream to this day.
RFC 822 (1982) mandated that email messages be 7-bit ASCII text. When attachments and international characters became necessary, MIME (Multipurpose Internet Mail Extensions) was invented specifically to encode binary data as ASCII using Base64 — a system that turns every 3 bytes of binary into 4 printable ASCII characters.
UTF-8, the encoding of 98%+ of the web, was designed by Ken Thompson and Rob Pike in 1992 to be fully ASCII-compatible. Any file containing only ASCII characters is identical in UTF-8. Code points 0–127 use a single byte identical to ASCII. This backward-compatibility decision made the global adoption of Unicode possible without breaking existing systems.
The constrained 95-character printable set gave rise to an entire art form. ASCII art emerged in the 1960s on line printers, flourished in the BBS era of the 1980s–90s (where ANSI art added color), and persists today in terminal banners, README files, code comments, and the demoscene. The spinning donut on this very page is ASCII art.
ROT13 — the simplest cipher — works because ASCII places A–Z and a–z as two contiguous blocks of 26. Base64 exists because SMTP could only transmit 7-bit ASCII. URL percent-encoding (%20 for a space) converts non-ASCII bytes to their hex values prefixed with %. All of these systems are direct consequences of the ASCII design.
The modern QWERTY keyboard was designed around ASCII. The layout of keys, the shift key producing uppercase variants, the placement of punctuation — all reflect ASCII's character assignments. The Ctrl key works by clearing bit 6 of an ASCII character: Ctrl+A sends code 1, Ctrl+C sends code 3 (ETX — end of text, which became the interrupt signal).
Printable ASCII — codes 32–126
All 95 printable characters. Hover for decimal code.
Control Codes — codes 0–31 & 127
The 33 non-printable characters. Many are obsolete; a handful still drive every terminal and program running today.
SGR — Select Graphic Rendition (text attributes)
| Code | Sequence | Description | Preview |
Standard foreground colors — codes 30–37, 90–97
Standard background colors — codes 40–47, 100–107
Cursor & terminal control sequences
256-color palette — \033[38;5;Nm (fg) / \033[48;5;Nm (bg)