⌨ DEVELOPER · DECODER

Unicode Unescape

Turn \u00e9, \uD83D\uDE00, \u{1F600}, \xc3\xa9 or € back into readable text. Paste a JSON string, a log line, Python output or a list of U+ code points — every common escape style is recognised automatically, even when they're mixed.

\u · \u{} · \U · \x UTF-8 · &#x; · CSS · U+ lists · Surrogate pairs
Tip: seeing \\u00e9 with two backslashes? The text was escaped twice — run the result through once more.Need to encode instead? Unicode Escape →
Escaped text Any escape style
Decoded text
Escapes decoded: –
Invalid: –
Output: –
Time: –
Auto-detects mixed formats · 100% Client-Side
◆ ABOUT THIS TOOL

How Unicode Unescaping Works

Every escape sequence becomes the character it stands for.

Escape sequences appear wherever text passes through code: JSON from an API (Caf\u00e9), JavaScript source, Python's repr() (\xe9, \U0001f600), byte dumps in logs (\xc3\xa9), HTML (é) and CSS (content: "\2014"). This tool reads the text from left to right and replaces each escape with its character, leaving everything else untouched.

Surrogate pairs such as \uD83D\uDE00 are combined into one character (😀). A half pair on its own isn't a valid character, so it's left as it is and reported.

\x bytes. A run of \xHH escapes is first read as UTF-8 (so \xc3\xa9 is é and \xf0\x9f\x98\x80 is 😀). If the bytes aren't valid UTF-8, each one is read as a Latin-1 character instead, the way Python's \xe9 means é.

U+ lists. If the input contains nothing but U+ code points (U+0048 U+0069), they're joined into text. Inside normal text, U+ notation is left alone.

⌘ REFERENCE

Recognised Escape Formats

All decoded automatically, even when mixed.

FormatExampleResultUsed by
\uXXXX\u00e9, \uD83D\uDE00é, 😀JavaScript, JSON, Java, C#
\u{X…}\u{1F600}😀ES6 JavaScript, Rust, Swift
\UXXXXXXXX\U0001F600😀Python, C, C++
\xHH\xc3\xa9 / \xe9éPython, PHP, C, logs
&#xX; / &#N;€, €€HTML, XML
\X (optional)\2014—CSS
U+XU+0048 U+0069HiUnicode charts
Simple escapes\n \t \" \\line break, tab, " \JSON, JavaScript, Python
◐ THREE STEPS

How to Use the Unicode Unescape

Get your result in under ten seconds.

1

Paste the escaped text

JSON, source code, logs, Python output or U+ lists.

2

Check the options

Simple escapes, HTML references and CSS escapes.

3

Copy the text

Invalid escapes are kept and reported, never silently dropped.

✓ FEATURES

Why Use the Unicode Unescape on Developers Web Tools

Fast, accurate and private — built for developers.

⇄

Mixed formats

\u, \u{}, \U, \x, &#x; and U+ in one pass.

😀

Surrogate pairs

\uD83D\uDE00 is combined correctly; half pairs are reported.

\x

UTF-8 bytes

\xc3\xa9 becomes é, not é.

⚠

Clear warnings

Out-of-range and broken escapes are kept and counted.

⚡

Fast

Large inputs are decoded in a background thread.

🔒

Private

Runs entirely in your browser.

FAQ

Frequently Asked Questions

Those two bytes are the UTF-8 encoding of é. The tool reads each run of \x bytes as UTF-8 first, and only falls back to one-byte Latin-1 characters when the bytes aren't valid UTF-8.

It's kept exactly as written and counted under Invalid — for example \u{110000} (beyond the last Unicode code point) or a lone surrogate like \uD83D without its partner.

In CSS, \b and \f are hex escapes (U+000B and U+000F). With Decode CSS escapes on, hex digits after a backslash are read the CSS way. Leave it off for JSON and JavaScript text.

It was probably escaped twice (\\u00e9). The first pass turns \\ into \; paste the result in again to decode the rest.

No. Everything runs in your browser.