Skip to content
AgileLogics

ASCII to Text

Decodes space-separated decimal character codes back into readable text: ASCII for 0-127 and Unicode code points above that (233 is é), not UTF-8 bytes.

How it works

Enter space-separated ASCII codes (e.g. 72 105) and click Convert.

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:

  1. Copy the numbers exactly as given.
  2. If they're separated by commas, dashes or anything other than whitespace, swap those for spaces.
  3. Paste into the input box and click Convert.
  4. 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

Frequently asked questions

How do I decode a message written in ASCII numbers?
Paste the numbers with a space or line break between each one and click Convert. 87 101 108 99 111 109 101 33 decodes to Welcome!. Uppercase letters are 65 to 90, lowercase 97 to 122, and 32 is a space between words.
My ASCII codes are separated by commas. Will that work?
Not directly. Only spaces, tabs and line breaks count as separators, so 72,105 gives the error Enter space-separated ASCII codes, e.g. 72 105. Replace the commas with spaces first.
Why does a code like 150 or 128 show nothing?
Codes 128 to 159 are control characters in Unicode, which this tool follows. In the Windows-1252 code page, 150 is an en dash and 128 is the euro sign, so if your numbers came from an old Windows program, those characters won't come out as you expect. Codes 160 to 255 match Latin-1 and do display normally.
What if my ASCII codes are in hex or binary?
This page only reads decimal. For hex pairs like 48 69 use the Hex to ASCII converter, and for 8-bit groups like 01001000 use the Text to Binary converter in its Binary to Text mode.
Is the decoding done on your server?
No. It happens in your browser and nothing is uploaded.