URL decode text

URL decode any percent-encoded string and get the original UTF-8 text back. Each %HH escape is converted to its byte value, then the byte stream is read as UTF-8 so multibyte characters reassemble correctly. Invalid escapes return [invalid] rather than throwing. The transform runs in your browser; nothing uploads.

Input
Line 1:1 LF cloud_done Saved locally
Result URL Decode
0 lines 0 chars

Percent-decoding, UTF-8 reassembled

URL decoding (percent-decoding) reverses %HH escapes back into the bytes they represent. TextResult uses JavaScript's native decodeURIComponent, which walks the input, converts each %HH token to its byte value, and then reads the resulting byte stream as UTF-8. So caf%C3%A9 becomes café, and name%3D1%2B2 becomes name=1+2.

Hex case does not matter on the decode side: %C3%A9 and %c3%a9 both produce é. Characters that are not part of a percent-escape pass through unchanged: literal letters, digits, and reserved characters in the input come out as-is. The + character is NOT translated to space here. If you need that (the application/x-www-form-urlencoded rule), find-replace + with a space first.

Invalid input returns [invalid]. Common causes are a stray % with fewer than two hex digits after it, a %HH sequence whose bytes are not valid UTF-8, or truncation in the middle of a multibyte character. For base64 strings, see base64 decode; for HTML entities, see HTML decode.

How to use url decode text

  1. 1Paste your percent-encoded string into the input panel on the left.
  2. 2The decoded text appears in the output panel on the right as you type.
  3. 3Both lowercase and uppercase hex pairs work (%c3 and %C3).
  4. 4Click Copy in the output header to copy the decoded text.
  5. 5If the result reads [invalid], look for an unescaped % or a truncated %HH pair.

Keyboard shortcuts

Drive TextResult without touching the mouse.

Shortcut Action
Ctrl FOpen the find & replace panel inside the input Plus
Ctrl ZUndo the last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor Plus
EscClose find & replace, or exit fullscreen
Ctrl KOpen the command palette to jump to any tool Plus
Ctrl SSave current workflow draft Plus
Ctrl PRun a saved workflow Plus

What this tool actually does

Standard %HH percent decoding

Each %HH token (where HH is two hex digits) is replaced with the byte value those digits represent. %20 -> space, %2F -> /, %C3%A9 -> é.

UTF-8 reassembly of multibyte characters

After byte substitution, the resulting byte stream is read as UTF-8. So %E3%81%93 reassembles to and %F0%9F%99%82 reassembles to 🙂. Single-byte ASCII escapes like %41 -> A work too.

Hex case is irrelevant

Both %C3%A9 and %c3%a9 decode to é. The decoder treats hex digits case-insensitively. Output of the encoder uses uppercase, but inputs from any source decode the same.

+ is NOT translated to space

This is RFC 3986 percent-decoding, not application/x-www-form-urlencoded. A literal + in the input passes through as +. If you need form-data semantics where + means space, find-replace + with space before decoding.

Graceful failure for malformed input

A stray % not followed by two hex digits, or a %HH sequence whose byte stream is invalid UTF-8, returns [invalid]. The error is shown in the output panel rather than thrown.

Worked example

%3D decodes to =, %20 decodes to a space, and each %C3%A9 reassembles as é.

Input
name%3DCaf%C3%A9%20r%C3%A9sum%C3%A9
Output
name=Café résumé

Settings reference

Behaviour Effect on output
%HH escapes Replaced with the byte value the two hex digits represent.
Hex case Case-insensitive. %C3 and %c3 decode the same.
UTF-8 multibyte sequences Reassembled as a single character. %E3%81%93 -> .
Plain characters Letters, digits, reserved characters, and whitespace pass through unchanged.
+ sign Pass through as +. NOT translated to space.
Stray % A % not followed by two hex digits triggers [invalid].
Bad UTF-8 A %HH byte stream that is not valid UTF-8 triggers [invalid].

FAQ

Why do + signs in my input come back as + instead of spaces?
This tool implements RFC 3986 percent-decoding, where + means literal +. The +-for-space rule is from application/x-www-form-urlencoded (HTML form bodies). Find-replace + with a space before decoding if your input came from a form post.
What does [invalid] mean?
The decoder rejected a malformed sequence. Either a % sign is followed by fewer than two hex digits, or the resulting bytes are not valid UTF-8. Check the position of every % in the input.
Can I decode an entire URL at once?
Yes, but read the result carefully. The : in https:// and the / in the path are valid URL characters and will not change. What does change are the encoded reserved characters and any percent-encoded multibyte text in the path or query.
Does it support emoji and non-Latin scripts?
Yes. UTF-8 multibyte sequences reassemble as single characters. %F0%9F%99%82 decodes to 🙂 and %E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF decodes to こんにちは.
Is the input sent anywhere?
No. Decoding runs entirely in your browser via the native decodeURIComponent. Nothing is uploaded, nothing is logged.