What this tool does
Every %XX sequence becomes the byte those two digits name, and the resulting bytes are read as UTF-8 text. caf%C3%A9 gives café, because the accented letter is two bytes.
Uppercase and lowercase hexadecimal both work.
The plus sign is the thing to know
A plus stays a plus. That is correct — and it is probably not what you expected, so it is worth being precise about why.
Two encodings look alike and disagree on exactly one character:
- percent-encoding, used in a URL path and a modern query string, writes a space as
%20and treats+as a literal plus; - form encoding (
application/x-www-form-urlencoded), what an HTML form submits, writes a space as+.
This tool applies the first, matching decodeURIComponent in a browser.
Nothing in the string says which one produced it. A tool that guessed would corrupt the other case: a plus is a legitimate character in an email address, a phone number, a search term. Turning every plus into a space would destroy those values as surely as leaving them alone inconveniences form data.
So if your input came from a form, replace + with %20 first. One find-and-replace, and the result is correct.
What it refuses
A percent sign not followed by two hexadecimal digits. 100% cannot be decoded — there is no byte to produce, and inventing one would be worse than an error. The correctly encoded form is 100%25.
A %XX sequence that is not valid UTF-8 is also refused rather than replaced with a placeholder, so you find out that the input was damaged rather than reading text that was never there.
Private by design
Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.