Browser processing Input is processed on your device. Privacy & storage

URL Encode / Decode

Percent-encode any text or URL — or turn %E2%9C%93 back into readable characters.

Input
Method: Space: Options:
Encoded output

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.