ASCII
ASCII (American Standard Code for Information Interchange) is a 7-bit character encoding standard that represents 128 characters, including English letters, digits, punctuation marks, and control characters.
It forms the foundation of modern text encoding and is a subset of the Unicode character encoding standard.
Character Set
ASCII defines exactly 128 characters (0-127):
- Control characters (0-31): Non-printable characters like newline, tab, carriage return
- Printable characters (32-126): Space, letters, digits, punctuation
- DEL (127): Delete character
Common ASCII Values
- Digits
0-9: 48-57 - Uppercase letters
A-Z: 65-90 - Lowercase letters
a-z: 97-122 - Space: 32
- Newline: 10 (LF)
- Tab: 9
Python and ASCII
Working with ASCII values:
>>> # Get ASCII value of a character >>> ord("A") 65 >>> ord("a") 97 >>> ord("0") 48 >>> # Get character from ASCII value >>> chr(65) 'A' >>> chr(97) 'a' >>> chr(48) '0' ASCII string methods:
>>> # Check if string contains only ASCII >>> text = "Hello, World!" >>> text.isascii() True >>> "Hello, 世界".isascii() >>> # Encode to ASCII bytes >>> text.encode("ascii") b'Hello, World!' ASCII and string operations:
>>> # Case conversion using ASCII offset >>> chr(ord("a") - 32) 'A' >>> # Check if character is ASCII letter >>> def is_ascii_letter(char): ... return "A" <= char <= "Z" or "a" <= char <= "z" ... >>> is_ascii_letter("a") True >>> is_ascii_letter("ñ") False ASCII and Unicode
ASCII is the first 128 code points of Unicode (U+0000 to U+007F). This means that:
- Every ASCII character has the same numeric value in Unicode.
- UTF-8 encodes ASCII characters as single bytes.
- ASCII files are valid UTF-8 files.
>>> # ASCII and UTF-8 produce identical bytes for ASCII characters >>> "Hello".encode("ascii") b'Hello' >>> "Hello".encode("utf-8") b'Hello' Common Use Cases
- Legacy Systems: Many older systems only support ASCII.
- Network Protocols: HTTP headers and email headers are often restricted to ASCII.
- Configuration Files: Many formats require ASCII-only content.
- URLs: Must be ASCII-encoded (non-ASCII characters use percent encoding).
Handling Non-ASCII Characters
>>> # Encoding errors with non-ASCII characters >>> try: ... "café".encode("ascii") ... except UnicodeEncodeError: ... print("Can't encode non-ASCII characters") ... Can't encode non-ASCII characters >>> # Error handling strategies >>> "café".encode("ascii", errors="ignore") b'caf' >>> "café".encode("ascii", errors="replace") b'caf?' >>> "café".encode("ascii", errors="xmlcharrefreplace") b'café' Best Practices
- Don’t assume text is ASCII—always handle encoding errors.
- Use UTF-8 instead of ASCII for new projects.
- When ASCII is required, validate input or use error handlers.
- Be explicit about encoding when opening files.
Related Terms
- Extended ASCII: Various 8-bit encodings (like Latin-1) that add 128 more characters.
- ANSI: Often misused to mean Windows code pages (not actually ASCII).
- Code Page: Character encoding tables used in older systems.
- Mojibake: Garbled text from incorrect encoding/decoding.
Related Resources
Tutorial
Unicode & Character Encodings in Python: A Painless Guide
In this tutorial, you'll get a Python-centric introduction to character encodings and unicode. Handling character encodings and numbering systems can at times seem painful and complicated, but this guide is here to help with easy-to-follow Python examples.
For additional information on related topics, take a look at the following resources:
- Strings and Character Data in Python (Tutorial)
- Unicode in Python: Working With Character Encodings (Course)
- Strings and Character Data in Python (Course)
- Python Strings and Character Data (Quiz)