How do you turn ASCII codes into text?
Treat each number as one character and replace it with the character it stands for: 65 is A, 97 is a, 32 is a space. This converter does that for a whole list of decimal codes at once. Separate the numbers with spaces or line breaks, click Convert, and the decoded text appears, ready to copy.
The mapping for 0 to 127 is the ASCII standard, documented for internet use in RFC 20. Numbers above 127 are decoded as Unicode code points, up to the last one, 1114111, so 233 gives é and 128077 gives 👍. They are not read as UTF-8 bytes.
Decoding a message
Number-coded messages turn up in puzzles, escape rooms, programming homework and capture-the-flag challenges. To read one:
- Copy the numbers exactly as given.
- If they're separated by commas, dashes or anything other than whitespace, swap those for spaces.
- Paste into the input box and click Convert.
- Read the result. If it looks like nonsense, the numbers may be in hex or another base (see the table further down).
Worked example: 87 101 108 99 111 109 101 33 decodes to Welcome!. The first number, 87, falls in the uppercase range (65 to 90), so the message starts with a capital. 101, 108, 99, 111, 109 and 101 are all between 97 and 122, the lowercase letters. The last code, 33, is an exclamation mark.
What the input box accepts
| Input | Result |
|---|---|
72 105 |
Hi |
72 and 105 on separate lines |
Hi |
72 105 (several spaces) |
Hi |
072 105 |
Hi, leading zeros are ignored |
72,105 |
Error |
72.5 |
Error |
0x48 0x69 |
Error, this is hex notation |
H i |
Error, letters aren't codes |
72 1114112 |
Error, past the last Unicode code point |
55296 |
Error, half of a UTF-16 surrogate pair |
Input that isn't a list of whole numbers shows "Enter space-separated ASCII codes, e.g. 72 105." A number that is too big, or a surrogate half (55296 to 57343) without its partner, gets an error naming that number. Either way nothing is decoded until the whole list is valid, and the output box is cleared rather than left showing an earlier result. A complete surrogate pair, the way JavaScript's charCodeAt reports an emoji, is joined back together: 55357 56397 gives 👍.
Codes that don't print anything
The first 32 ASCII codes, plus 127, were designed to control teleprinters and terminals rather than to be printed. Most of them decode to characters you can't see in the output box, which can make it look as though part of your message is missing:
| Code | Name | What you see |
|---|---|---|
| 0 | NUL | Nothing visible |
| 7 | BEL (bell) | Nothing visible |
| 9 | Horizontal tab | A gap |
| 10 | Line feed | A new line |
| 13 | Carriage return | Usually nothing, or a new line |
| 27 | Escape | Nothing visible |
| 127 | Delete | Nothing visible |
The characters are still there, though. Copy the output into a program and they come along. If you're decoding something meant to be readable, a stray 0 or 27 usually means a number was mistyped or a separator was lost, such as 7 and 2 written as 7 2 instead of 72.
The "extended ASCII" problem with 128 to 255
ASCII stops at 127. Plenty of older software used the spare eighth bit for 128 more characters, and called the result extended ASCII, but there was never a single agreed table. This tool decodes every number as a Unicode code point, and that choice has a visible effect:
- 160 to 255 match ISO 8859-1 (Latin-1), so 233 is
é, 241 isñand 169 is©. These usually decode the way people expect. - 128 to 159 are invisible control codes in Unicode. Windows-1252, the old default on Western Windows systems, put printable characters there instead: per the WHATWG windows-1252 index, 128 is
€, 146 is a curly apostrophe and 150 is an en dash. Feed those numbers to this tool and they decode to blank control characters.
If your list came from a Windows-era program and contains numbers in the 128 to 159 range, substitute the Unicode code points instead: 8364 for €, 8217 for the curly apostrophe, 8211 for the en dash.
Codes in another base
The same character can be written in several bases, and this page only reads base 10:
| Format | Hi written that way |
Decoder to use |
|---|---|---|
| Decimal | 72 105 |
This page |
| Hexadecimal | 48 69 |
Hex to ASCII |
| Binary | 01001000 01101001 |
Text to binary, Binary to Text mode |
To encode text into decimal codes rather than decode them, use text to ASCII, and if you need to look up a single code by eye, the ASCII table lists all 128.
Last updated