How to use the Unicode Decoder
Decode Unicode escapes in two steps:
1
Paste the encoded string
Enter any text containing Unicode escape sequences in any format — \uHHHH, \u{HHHH}, U+HHHH, &#xHHHH;, or &#DDDDD;. You can mix formats freely.
2
Read the decoded output
The decoded text appears instantly. Any unrecognized sequences are passed through unchanged. Click Copy to grab the result.
When to use this tool
Use this tool when you encounter Unicode escape sequences that you need to read as text:
- →Decoding \uHHHH escape sequences found in JavaScript source code, minified bundles, or transpiled output
- →Reading API responses or database values that contain Unicode-escaped strings instead of the actual characters
- →Decoding obfuscated JavaScript that uses Unicode escapes to hide readable strings and identifiers
- →Converting U+HHHH code point references from Unicode documentation or specifications to their actual characters
- →Debugging JSON parsing issues where special characters appear as \u escape sequences in log output
- →Reverse-engineering encoded strings found in mobile app binaries or security research contexts
Frequently asked questions
Q:Can this tool decode mixed Unicode escape formats in a single string?
Yes — the decoder processes all five escape formats simultaneously in a single pass. A string like '\u0048 U+0065 ll\u{6F}' correctly decodes to 'Hello'. The decoder applies replacements in the order: \u{HHHH} first, then \uHHHH, then U+HHHH, then &#xHHHH;, then &#DDDDD; — this ordering prevents one pattern from interfering with another.
Q:How do I decode a JavaScript string that contains \uHHHH escapes?
Paste the raw string (including the backslash and 'u' characters, not the interpreted character) into the input. For example, if you see \u0048\u0065\u006C\u006C\u006F in a source file or log, paste exactly that text — the decoder will output 'Hello'. If your editor or terminal already interprets the escape sequence and shows the actual character, there's nothing to decode. The tool decodes the text representation of escapes, not already-interpreted characters.
Q:What happens to text that contains no Unicode escapes?
Text with no recognized Unicode escape patterns passes through the decoder completely unchanged. The tool only replaces sequences that match the five supported escape formats. Regular text, already-decoded characters, and unrecognized escape patterns are all preserved as-is in the output. This means you can safely pass partially-encoded strings through the decoder without worrying about accidental modification of the non-escaped portions.
Q:Why would a database or API return \uHHHH instead of the actual characters?
Several scenarios produce Unicode-escaped strings instead of actual characters: (1) JSON serialization libraries that escape all non-ASCII characters for ASCII safety (this is valid per the JSON spec); (2) database drivers that encode non-ASCII text as Unicode escapes during export; (3) log aggregation systems that ASCII-encode strings to avoid encoding issues; (4) Java's Properties file format which uses \uHHHH for all non-ISO-8859-1 characters; (5) JavaScript source compiled by older transpilers or minifiers. These are all valid representations of the same data — the decoder converts them back to the human-readable form.
Q:How do I decode HTML entities like © or é?
This Unicode Decoder handles the numeric formats © (hex) and © (decimal). For named HTML entities like é, ©, &, and <, use the dedicated HTML Entity Decoder tool which uses the browser's full HTML5 named entity parser. The Unicode Decoder focuses on numeric code point representations across all formats, while the HTML Entity Decoder covers the complete HTML5 named entity vocabulary of 2,000+ entity names.
Q:Can this tool handle surrogate pairs?
Yes — surrogate pairs like \uD83D\uDE00 (which represents 😀, U+1F600) are handled by the JavaScript String.fromCodePoint and replace mechanisms. When two consecutive \uHHHH escapes form a valid UTF-16 surrogate pair (high surrogate D800–DBFF followed by low surrogate DC00–DFFF), modern JavaScript string handling automatically interprets them as the combined supplementary code point. The \u{1F600} format encodes the same character directly without needing surrogate pairs.