Inspect a legacy escaped string

Paste text directly. Processing runs in the browser; there is no file upload, URL fetching or batch mode. These functions are for legacy data, not new application code.

  1. Enter the original text to encode, or a legacy escaped string to decode.
  2. Run the chosen operation, inspect the plain-text result and copy it. Editing the input clears the old result.
  3. Paste the result into the input yourself for another operation, or clear both fields.

How the legacy representation works

Two escape widths, one UTF-16 unit at a time

A-Z a-z 0-9 and @ * _ + - . / stay unchanged. Other UTF-16 code units below 256 use %XX; the rest use %uXXXX. Hex digits are uppercase and zero-padded to two or four positions; the u is lowercase.

é becomes %E9, 你好 becomes %u4F60%u597D, and 😀 uses two units: %uD83D%uDE00. The symbols ~, ' and & become %7E, %27 and %26.

Malformed escapes stay in the text

Decoding %u4f60 %GG %U0041 produces 你 %GG %U0041. Hex digits accept either case, but the u marker must be lowercase. Invalid pieces such as %, %GG and %u123 remain literal while valid sequences elsewhere decode. They do not cause URIError; this is not strict validation.

Neither UTF-8 nor string-literal parsing

Decoding %E4%BD%A0 yields separate code units U+00E4, U+00BD and U+00A0, not 你. For modern UTF-8 URL components, use a tool based on encodeURIComponent/decodeURIComponent instead.

Literal \n, \u4F60 and & remain unchanged on decoding. There is no JS/JSON string parsing, HTML entity decoding or code execution. Escaping is not encryption.

Questions about legacy escape strings

What happens to + and an existing %20?

+ stays + in both directions; a space encodes as %20. Encoding %20 gives %2520. Decoding %2520 gives the literal text %20 in one pass, not a space. This is not form decoding.

Does the tool preserve whitespace?

It does not trim whitespace or add Unicode normalization. The textarea normalizes actual line endings to LF, encoded as %0A, so original CRLF or CR bytes are not preserved. Empty input gives an empty result.

Does successful decoding guarantee valid Unicode?

No. Native escape/unescape accepts lone surrogates such as %uD800. Display or clipboard handling can replace them; do not rely on a copy round trip. The tool reports unavailable native functions rather than substituting another encoder.

Recent tools: