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
- 1Paste your percent-encoded string into the input panel on the left.
- 2The decoded text appears in the output panel on the right as you type.
- 3Both lowercase and uppercase hex pairs work (
%c3and%C3). - 4Click Copy in the output header to copy the decoded text.
- 5If the result reads
[invalid], look for an unescaped%or a truncated%HHpair.
Keyboard shortcuts
Drive TextResult without touching the mouse.
| Shortcut | Action |
|---|---|
| Ctrl F | Open the find & replace panel inside the input Plus |
| Ctrl Z | Undo the last input change |
| Ctrl Shift Z | Redo |
| Ctrl Shift Enter | Toggle fullscreen focus on the editor Plus |
| Esc | Close find & replace, or exit fullscreen |
| Ctrl K | Open the command palette to jump to any tool Plus |
| Ctrl S | Save current workflow draft Plus |
| Ctrl P | Run 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 é.
name%3DCaf%C3%A9%20r%C3%A9sum%C3%A9
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?
+ 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?
% 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?
: 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?
%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?
decodeURIComponent. Nothing is uploaded, nothing is logged.