Decimal to ASCII Converter

A webhook log prints [84, 111, 107, 101, 110] where a word should be. An escape room clue reads 83 79 83. A spreadsheet column built with =CODE() needs turning back into letters. Paste the numbers in any of those shapes and read the text, with control codes named and anything past 127 called out.

Convert decimal codes to text

Try
Text
Decimal 65 = A
Numbers
14
ASCII
14
Above 127
0
Skipped
0

14 numbers, all inside ASCII (0 to 127).

Decimal ASCII table, 0 to 127

Read a row number plus a column offset: row 60, column +5 is 65, capital A. Click a cell to add its code to the input. Cells used in your input light up.

Row+0+1+2+3+4+5+6+7+8+9
0
10
20
30
40
50
60
70
80
90
100
110
120

Read decimal codes by hand

Three anchor numbers cover most English text. Learn them once and short codes stop needing a lookup.

  • 48 is the digit 0. Add the digit you want: 55 is 7.
  • 65 is capital A. Subtract 64 for the letter's place in the alphabet: 84 minus 64 is 20, the letter T.
  • 97 is lowercase a. Subtract 96 the same way: 111 minus 96 is 15, the letter o.

Upper and lower case sit exactly 32 apart. 72 is H, 104 is h. Space is also 32, so a stray 32 at the end of a list means a trailing space in the original string.

Try 84 111 111 108 on paper. 84 is T. 111 is o, twice. 108 minus 96 is 12, the letter l. The word is Tool. Click those four cells in the table to check your answer.

Where decimal lists come from

Nobody types decimal codes for fun. They fall out of code, spreadsheets, or markup, each with its own wrapping. Paste them as they are.

SourceTypical outputPaste as-is?
JavaScript charCodeAt() in a loop[84, 111, 111, 108]Yes, brackets get stripped
Python list(b"Tool")[84, 111, 111, 108]Yes
Excel or Google Sheets =CODE(A1) columnOne number per lineYes, line breaks count as separators
HTML decimal entitiesToolYes, the &# and semicolon get removed
C or Java char arrays{84, 111, 111, 108}Yes
Windows Alt codesAlt+0150Type 150, then pick Windows-1252
Hex dumps54 6F 6F 6CNo, use Byte to ASCII

Accepted separators: spaces, commas, semicolons, pipes, tabs, line breaks. Mixing them in one paste works fine.

128 to 255: one number, two characters

ASCII ends at 127. Above 127, the character depends on the system which produced the number. Unicode reads 233 as é. So does Windows-1252, the default code page on older Windows setups. The two agree everywhere from 160 to 255. They disagree on 128 to 159.

DecimalUnicodeWindows-1252
128Invisible control, U+0080€
146Invisible control, U+0092’ (curly apostrophe)
150Invisible control, U+0096– (en dash)
153Invisible control, U+0099™
233éé

Pick Windows-1252 when the numbers came from Excel CHAR() on Windows, Alt codes, or a legacy database export. Keep Unicode for JavaScript, Python chr(), Java, or any list of code points.

HTML entities are the odd case. The HTML spec tells browsers to read € through Ÿ as Windows-1252, so – renders as an en dash on every web page. Switch to Windows-1252 for entity lists in this range. The status line flags any number between 128 and 159, so a wrong guess never lands in your clipboard unnoticed.

Emoji show up as two numbers

JavaScript strings store text as UTF-16. charCodeAt() reads one 16-bit unit at a time, so the thumbs up emoji comes out as 55357 56397, a surrogate pair. codePointAt() returns the real code point, 128077.

Paste either form. Pairs get joined into one emoji, and the status line reports how many. A lone half of a pair, such as 55357 on its own, gets skipped with a note, since no character exists for half a pair.

Where this converter falls short

  • Decimal only. Hex such as 4A or 0x4A gets skipped. ASCII to Text reads hex or binary codes.
  • UTF-8 bytes do not merge into characters.195 169 is the UTF-8 byte pair for é, but here each number counts as its own code point, so you get é. Paste byte lists into Byte to ASCII with UTF-8 decoding on.
  • Leading zeros read as decimal.072 is 72, the letter H, not octal 58 as in old C or JavaScript literals.
  • Negative numbers, fractions, and values above 1,114,111 get skipped and listed with the reason.
  • The table stops at 127. Codes above show as a list under the table, not as cells.
  • Names mode copies the tags.[LF] lands in the clipboard as four characters. Set control codes to real characters for a clean copy.

Decoding runs in your browser. Nothing you paste leaves the page.

Decimal to ASCII questions

Common codes, code snippets, and the numbers which trip people up.

What is 65 in ASCII?

Capital A. Lowercase a is 97, exactly 32 higher. The digit 0 is 48, and space is 32.

How do I convert decimal to ASCII in JavaScript or Python?

In JavaScript, String.fromCharCode(72, 105) returns Hi. Use String.fromCodePoint for values above 65535, such as emoji. In Python, "".join(map(chr, [72, 105])) gives the same result. Both read numbers as Unicode code points, matching the default mode on this page.

Why does 150 show as a tag and not a dash?

In Unicode, 150 is a C1 control with no visible glyph. Windows-1252 reads 150 as an en dash. Switch "Numbers above 127" to Windows-1252 when the codes came from Excel, Alt codes, or HTML entities.

Does the converter accept HTML entities?

Decimal ones, yes. Paste Hi and the &# prefix plus the semicolon get removed, leaving Hi. Hex entities such as H get skipped. ASCII to Text handles hex codes.

Why did my list print é instead of é?

The numbers were UTF-8 bytes, not code points. 195 169 is how UTF-8 stores é in two bytes. This page reads each number as one character. Paste the list into Byte to ASCII and set bytes above 7F to UTF-8.

Which separators work between numbers?

Spaces, commas, semicolons, pipes, tabs, line breaks, plus square brackets, parentheses, or braces from code arrays. One paste mixing several of them decodes fine.