URL Encode / Decode
Percent-encode any text or URL — or turn %E2%9C%93 back into readable characters.
Percent-encoding in one minute
URLs can only carry a limited set of ASCII characters, so anything else — spaces, accents,
Chinese characters, &, ?, emoji — is written as a percent sign
plus two hex digits of its UTF-8 bytes. café becomes caf%C3%A9, and
✓ becomes %E2%9C%93. Decoding reverses the process, which is why a URL pasted
from a browser address bar is often unreadable: the browser encoded it on the way out.
The tricky part is which characters to encode, because the rules differ by position.
A whole URL must keep its structural characters (/, :,
?, &, =) intact — that is
encodeURI, the Full URL mode here. A single query value must
escape them, or the value would break the query string apart — that is
encodeURIComponent, the Component mode, and the one you want
most of the time. RFC 3986 is the strict variant that also escapes
! ' ( ) *, which Java's URLEncoder and OAuth signature bases expect.
Spaces have two encodings because of history: %20 in generic percent-encoding,
and + in application/x-www-form-urlencoded — the format browsers
submit forms in. Using the wrong one in a query string is the classic bug where a search for
"a+b" turns into "a b".
FAQ
Which mode should I use for a query parameter value?
Component — it escapes &, = and ? so the value cannot break the query string. Use Full URL only when encoding an entire URL that already has its own parameters.
When do I need + instead of %20?
When the target is form data, a legacy query string parser, or a server that expects application/x-www-form-urlencoded. Modern APIs and REST paths normally want %20.
What does "Each line" do?
It encodes or decodes every line independently and joins them back, so you can paste a list of values — one per line — and get a list of encoded values without touching line breaks.
Why does decoding fail on some strings?
A lone %, a truncated escape like %E2%9C or bytes that are not valid UTF-8 cannot be decoded. The tool reports where the problem is, or — with Lenient decode on — leaves the broken part as-is and decodes the rest.
Is anything uploaded?
No — encoding and decoding happen entirely in your browser.