Skip to content
Unicode Explained

Unicode vs ASCII: What’s the Difference?

ASCII is a 128-character set from the 1960s; Unicode covers every language and symbol. See how they relate and why UTF-8 bridges them.

By SymbolHeroUpdated 5 min read

ASCII is a small 1960s character set of 128 characters covering only unaccented English letters, digits, basic punctuation and control codes. Unicode is a universal character set with room for over a million code points, and its first 128 code points are exactly ASCII, so ASCII is a subset of Unicode.

ée with Acute (é)U+E9Details

The short version

ASCII Unicode
First published 1963 1991
Size 128 code points (0–127) 1,114,112 code points (U+0000–U+10FFFF), roughly 160,000 assigned
Bits 7 bits per character Depends on the encoding: UTF-8, UTF-16 or UTF-32
Languages Basic English only Virtually every written language
Symbols A few, such as $ % & @ # * Currency, math, arrows, shapes, emoji and many more
Accented letters None All of them
Compatibility First 128 code points are identical to ASCII

What ASCII is

ASCII stands for American Standard Code for Information Interchange. It was published in 1963 and revised through the 1960s, when teleprinters and early computers needed a common way to represent text. It uses 7 bits, giving 128 possible values:

  • 0–31 and 127: 33 control codes such as line feed (10), carriage return (13), tab (9) and delete (127). Most are relics of teleprinters; a handful are still used for line endings and tabs.
  • 32–126: 95 printable characters: the space, digits 0–9, uppercase A–Z, lowercase a–z and punctuation such as ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~.

That is the whole set. There is no é, no £, no €, no curly quotes, no em dash and no degree sign. For American English in the 1960s that was acceptable. For the rest of the world it was not.

The “extended ASCII” problem

Computers store data in 8-bit bytes, so ASCII left one bit unused, and values 128–255 were free. Vendors filled them in, but each did it differently. The original IBM PC used code page 437, which put box-drawing characters, some accented letters and a few Greek letters there. Western European versions of Windows used Windows-1252, which put curly quotes, the euro sign and accented letters there. The ISO-8859 family defined yet more variants for Central European, Cyrillic, Greek and other alphabets.

All of these are often loosely called “extended ASCII”, but none of them is ASCII, and they conflict. Byte 130 is é in code page 437 and a low single quotation mark ‚ in Windows-1252. A document written on one system and opened on another showed the wrong characters, and no single code page could mix, say, Greek and Russian in one file.

You can still see this history on any Windows PC. Alt codes without a leading zero use code page 437, and those with a leading zero use Windows-1252. That is why the degree sign ° has two Alt codes, Alt + 248 and Alt + 0176, and why the euro sign € is Alt + 0128 but has no code page 437 code at all. Both methods need the numeric keypad with Num Lock on.

What Unicode changed

Unicode replaced the patchwork with one table that gives every character a unique code point, regardless of language, platform or program. It was designed from the start to be backward compatible:

  • Code points U+0000 to U+007F are exactly the 128 ASCII characters, in the same order.
  • Code points U+0080 to U+00FF match ISO-8859-1 (Latin-1), so é is U+00E9, which is 233 in both Latin-1 and Unicode.
  • Everything else, from Greek and Cyrillic to math operators, arrows and emoji, has its own place above that.

So the letter A is 65 (hex 41) in ASCII and U+0041 in Unicode. The same number, the same character.

Where UTF-8 fits in

ASCII is both a character set and an encoding: each character is one byte. Unicode separates the two ideas. The character set assigns code points, and encodings such as UTF-8, UTF-16 and UTF-32 turn those code points into bytes.

UTF-8 was designed so that the 128 ASCII characters are stored as the same single bytes they always were. The consequences are practical and important:

  • Every valid ASCII file is also a valid UTF-8 file. Nothing needs converting.
  • English text costs no extra space in UTF-8.
  • Characters outside ASCII use more bytes. é takes two bytes (C3 A9), € takes three (E2 82 AC) and most emoji take four.
  • Multi-byte sequences never contain ASCII byte values, so software that searches for ASCII characters like / or < will not be confused by non-ASCII text.

This is why UTF-8 won. It let the internet move to Unicode without breaking the enormous amount of existing ASCII data and software. To see the exact bytes for any character, try the Unicode Converter.

Side-by-side examples

Character In ASCII? Unicode code point UTF-8 bytes
A Yes (65) U+0041 41
$ Yes (36) U+0024 24
~ Yes (126) U+007E 7E
é No U+00E9 C3 A9
£ No U+00A3 C2 A3
No U+2014 E2 80 94
No U+20AC E2 82 AC
😀 No U+1F600 F0 9F 98 80

When “ASCII only” still matters

ASCII is not dead. Plenty of systems still accept only ASCII, or behave better with it:

  • Domain names and email addresses. Internationalized names exist, but under the hood domains are converted to an ASCII form (Punycode), and many forms still reject non-ASCII email addresses.
  • File names and URLs. Non-ASCII characters in URLs are percent-encoded as their UTF-8 bytes, so é in a URL becomes %C3%A9. Many teams stick to ASCII slugs to avoid trouble.
  • Source code identifiers, config files and old protocols. Some tools choke on smart quotes or non-breaking spaces pasted in from a word processor.
  • Legacy databases and CSV imports that assume a single-byte encoding.

A common real-world bug is text that looks like plain ASCII but is not. A curly apostrophe ’ (U+2019) instead of a straight one ‘ (U+0027), an en dash – instead of a hyphen, or an invisible non-breaking space can break a password, a search or a line of code. Paste the text into the Unicode Lookup tool to see every code point and spot the impostor.

Which should you use?

For anything new, use Unicode encoded as UTF-8. It handles every language and symbol, it is the default on the web and in modern software, and it is fully compatible with ASCII text. Only restrict yourself to ASCII when a specific system demands it, and even then, convert at the boundary rather than designing around it.

Frequently asked questions

Is ASCII a subset of Unicode?

Yes. The first 128 Unicode code points are identical to the 128 ASCII characters, so any ASCII text is also Unicode text.

Is ASCII 7-bit or 8-bit?

ASCII is a 7-bit code with 128 characters. It is usually stored in 8-bit bytes with the top bit set to zero. The 8-bit sets that fill in values 128–255 are separate code pages, not ASCII.

Does UTF-8 make English text bigger than ASCII?

No. ASCII characters are one byte in UTF-8, exactly as in ASCII. Only characters outside ASCII take two to four bytes.

Is the euro sign an ASCII character?

No. € is U+20AC in Unicode. On Windows it is Alt + 0128, a code from the Windows-1252 code page, not from ASCII.

Need a different symbol?

Search 7,503 symbols by name, everyday word or code point, and copy any of them in one tap.