A per-line URL decoder
The tool applies `decodeURIComponent` to every non-blank line independently. `%20` becomes space, `%26` becomes `&`, `%2F` becomes `/`, and multi-byte UTF-8 sequences (`%C3%A9` = `é`, `%F0%9F%98%80` = 😀) reconstruct correctly. Use on URL fragments, query-string values, or path segments - anywhere percent-escapes are the only encoding. For `application/x-www-form-urlencoded` bodies this is a partial decode: percent-escapes resolve here, but the `+` → space convention used by form encoders needs a second pass (see the next paragraph).
If `decodeURIComponent` throws on a particular line (usually an orphan `%` or an invalid percent sequence like `%XY`), the tool catches the error and returns the line unchanged. That keeps partial data usable - you will see the broken line standing out among the cleanly decoded ones.
There are no options because `decodeURIComponent` is agnostic about encoding flavour. It reverses the output of Query mode and Path mode from the encoder directly. For Form-mode output (where spaces became `+`), the `+` stays as `+` in the decode - swap `+` for space separately if you need that.
How to use decode a url-encoded list
- 1Paste your URL-encoded lines into the input panel
- 2Output is each line decoded, one per line
- 3Malformed lines pass through unchanged so you can spot them
- 4No options to configure - decoding is `decodeURIComponent` per line
- 5Pair with encode-a-list-as-a-url-string to round-trip
Keyboard shortcuts
Drive ListShift without touching the mouse.
What this decoder actually does
Per-line `decodeURIComponent` with error recovery.
Browser-native `decodeURIComponent`
Each line goes through the browser's `decodeURIComponent` function - the spec-compliant inverse of `encodeURIComponent`. Every standard percent-escape resolves correctly.
Unicode via multi-byte UTF-8
Percent-encoded UTF-8 byte sequences reconstruct to their original characters. `caf%C3%A9` → `café`, `%F0%9F%98%80` → `😀`. Works for any Unicode code point, including emoji and non-Latin scripts.
Malformed input passes through
Orphan `%` characters or invalid sequences like `%XY` would normally throw. The tool catches the error and returns the raw line unchanged, so you see the broken item in the output rather than a crash or an empty result.
Does not swap `+` back to space
`decodeURIComponent` treats `+` as a literal `+`, not space. If your source was Form-encoded (spaces as `+`), you will get `hello+world` back. Run Replace after this tool to swap `+` for space if needed.
Runs in your browser
Decoding happens client-side - useful when the URLs you are decoding contain auth tokens, internal IDs, or tracking parameters you would not paste into a public decoder.
Worked example
Every standard percent-escape resolves, including multi-byte UTF-8 and escaped slashes.
hello%20world green%20%26%20blue caf%C3%A9%20au%20lait path%2Fwith%2Fslashes
hello world green & blue café au lait path/with/slashes
Behavior reference
No user options. These are the fixed rules the decoder applies.
| Rule | What it does | Example |
|---|---|---|
| Per-line decode | Each line runs through `decodeURIComponent` independently | Four input lines → four output lines |
| UTF-8 reconstruction | Multi-byte percent sequences combine into the original character | `%C3%A9` → `é`; `%F0%9F%98%80` → 😀 |
| `+` is literal, not space | Matches `decodeURIComponent` behaviour - not Form-mode decoding | `hello+world` stays as `hello+world` |
| Malformed input recovery | Invalid sequences return the raw line unchanged | `%XY` or orphan `%` pass through, no crash |