HCODX/Unicode Escape to Text
100% browser-based · \uXXXX, \u{X}, \xXX, %uXXXX, 0xXXXX

Unicode Escape to Text

Decode Unicode escape sequences back to text. Recognizes \uXXXX, ES2015 \u{X}, \xXX, legacy %uXXXX, and 0xXXXX — mixed formats fine.

Escaped text
Plain text
Decode options
Reverse (Text → Escape)
Input size
0 B
Output size
0 B
Ratio
Status
Ready
Example

Escapes in, text out

Mixed formats — \uXXXX alongside ES2015 \u{X} — decode cleanly to a single string.

Escaped
Caf\u00e9 \u{1F680}
Decoded
Café 🚀
Use cases

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.

Step by step

How to decode Unicode escapes

1

Paste your escaped string

Drop it into the left editor — mix \uXXXX, \u{X}, \xXX, %uXXXX freely.

2

Choose tolerance

Leave Accept all formats on for the widest coverage. Turn it off to decode only standard \uXXXX / \u{X}.

3

Click Decode

Or leave auto-decode on for live updates. Runs locally — no upload.

4

Copy or download

Copy to clipboard or save as .txt. Reverse with the encoder for a round-trip check.

FAQ

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

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 \uXXXX escapes); we combine them via String.fromCharCode and rely on JavaScript's UTF-16 semantics so \uD83D\uDE80 renders correctly as 🚀.
  • \u{X} — ES2015 extended form. 1–6 hex digits in one escape, any code point up to U+10FFFF. Decoded via String.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.

Related

Related tools