Unicode Escape to Text
Decode Unicode escape sequences back to text. Recognizes \uXXXX, ES2015 \u{X}, \xXX, legacy %uXXXX, and 0xXXXX — mixed formats fine.
Escapes in, text out
Mixed formats — \uXXXX alongside ES2015 \u{X} — decode cleanly to a single string.
Caf\u00e9 \u{1F680}Café 🚀
What you'll use this for
Anywhere you copy escape-encoded strings out of source code, logs, or legacy data and need to see the actual characters they represent.
Parsing language string literals
Pull a "...\uXXXX..." literal straight out of JS / Java / Python source and see what it really says.
Debugging logs
Decode \u escapes in log lines emitted by JSON serializers that escape non-ASCII by default.
CTF challenges
Capture-the-flag puzzles often hide flags behind layered escape encodings — this tool unwraps them in one paste.
Migration from legacy
Decode %uXXXX from legacy systems (older IE, VBScript, classic ASP) into modern text.
How to decode Unicode escapes
Paste your escaped string
Drop it into the left editor — mix \uXXXX, \u{X}, \xXX, %uXXXX freely.
Choose tolerance
Leave Accept all formats on for the widest coverage. Turn it off to decode only standard \uXXXX / \u{X}.
Click Decode
Or leave auto-decode on for live updates. Runs locally — no upload.
Copy or download
Copy to clipboard or save as .txt. Reverse with the encoder for a round-trip check.
Frequently asked questions
\uXXXX, ES2015 \u{X}, \xXX, legacy %uXXXX (IE / VBScript), and 0xXXXX.
Yes — \u{1F680} and surrogate pairs (\uD83D\uDE80) both decode to 🚀.
Yes. No signup, no limits, no ads. Runs entirely in your browser.
0x... is ambiguous — it could be a numeric literal. Toggle off if you don't want those decoded.
About Unicode escape decoding
Many languages, configuration formats, and protocols escape non-ASCII characters into ASCII-safe sequences. This tool reverses that — pasting any combination of the escape forms below produces the original Unicode text.
Recognized formats
\uXXXX— four hex digits, the UTF-16 code unit. JavaScript, Java, Python, JSON, .NET. Astral characters appear as surrogate pairs (two\uXXXXescapes); we combine them viaString.fromCharCodeand rely on JavaScript's UTF-16 semantics so\uD83D\uDE80renders correctly as 🚀.\u{X}— ES2015 extended form. 1–6 hex digits in one escape, any code point up toU+10FFFF. Decoded viaString.fromCodePoint.\xXX— two hex digits, single byte / Latin-1 code point. Common in Python, C, and shell.%uXXXX— legacy non-standard form from Internet Explorer, VBScript, classic ASP. Identical numerics to\uXXXX.0xXXXX— bare hex literal. Ambiguous (it could be a numeric value), so toggle off if context dictates.
Surrogate pair handling
JavaScript strings are sequences of UTF-16 code units. When we replace each \uXXXX with the single character its hex represents, an adjacent pair of surrogate code units forms a valid UTF-16 string that renders as the astral character. So \uD83D\uDE80, \u{1F680}, and the bare emoji 🚀 are all equivalent after decoding.
Order of replacement
We process \u{X} first (greedy match on braces), then \uXXXX, then optionally \xXX, %uXXXX, and 0xXXXX. This avoids accidentally consuming the leading \u of a brace form.