What this tool does
It is the inverse of looking up a character’s code: give it numbers and it returns the text those code points spell out. This covers the full Unicode range, not just the 0–127 ASCII subset — so emoji, accented letters, mathematical symbols, and characters from scripts around the world all work.
How it works
The input is split on spaces, commas, and newlines into individual tokens. Each token is parsed as a number — in decimal by default, or in hexadecimal when you pick the hex base or prefix the token with 0x. The tool then validates that the value is a legal Unicode code point: it must lie between 0 and 0x10FFFF and must not fall in the surrogate range 0xD800–0xDFFF, which Unicode reserves and which cannot stand alone as a character.
Valid code points are converted with String.fromCodePoint, which correctly produces characters above U+FFFF (such as emoji) instead of mangling them into surrogate halves. The decoded characters are concatenated into the output string.
Examples
Decimal mode:
72 101 108 108 111 → Hello
72 105 33 → Hi!
Hexadecimal mode (or with 0x prefix):
0x48 0x65 0x6C 0x6C 0x6F → Hello
0x1F600 → 😀 (U+1F600 GRINNING FACE)
0xE9 → é (U+00E9 LATIN SMALL LETTER E WITH ACUTE)
Mixed separators:
72, 101 108,108
111 → Hello (spaces, commas, and newlines all work as separators)
When to use this tool
Decoding stored values. Databases and log files sometimes store characters as integer code-point values (decimal or hex). Paste the values here to see what text they represent.
Verifying a character encoding. If you have a list of code points from a Unicode table and want to see the resulting glyphs, this is faster than looking up each one individually.
Debugging string data. When you receive a string as a JSON array of integers (a common format in some serialization systems), paste the numbers here to reconstruct the text.
Learning Unicode. Experimenting with known code-point ranges — Latin letters at 65–90 and 97–122, Cyrillic at 1040–1103, emoji at 0x1F300 and above — is a practical way to build intuition for how Unicode is structured.
The surrogate range: why some values are rejected
Code points from 0xD800 to 0xDFFF (55,296 to 57,343 in decimal) are rejected even though they fall within the 0–0x10FFFF range. These values are Unicode surrogates — a mechanism used by UTF-16 encoding to represent code points above U+FFFF. They are not standalone characters and do not represent any glyph. In UTF-8, they are simply invalid.
If you are seeing errors for values in this range, the source data was probably serialised from a UTF-16 stream without stripping the surrogate pairs first. The code points you want are the ones above U+FFFF encoded as surrogate pairs — you need to reassemble the pair and compute the actual code point: (high - 0xD800) × 0x400 + (low - 0xDC00) + 0x10000.
Notes
For code points 0–127 the output matches plain ASCII exactly. Tokens outside the valid range (above U+10FFFF), or in the surrogate band (0xD800–0xDFFF), are reported as errors so you can spot a bad value rather than getting silent garbage. This tool pairs directly with the character-to-code converter for round trips. All processing runs locally in your browser — nothing is uploaded.