📥 Input

Type or paste any text. Special characters are converted to %XX escapes.

No options for this mode.
— Empty 0 bytes

📤 Output

Encoded result appears below.

0 bytes
Runs in your browser Nothing is uploaded No signup

FAQ

What does this tool do?

It converts text between four forms: URL-encoded (percent escapes), URL-decoded, Base64-encoded, and Base64-decoded. The conversion uses the browser's built-in encoders for each format.

Is my input sent anywhere?

No. The page is served from a host, but the encoding and decoding both run in the browser. Nothing typed into the input box is uploaded or logged.

What is the difference between URL encoding and Base64?

URL encoding escapes individual characters that are not safe in URLs by replacing them with percent-hex sequences (for example, a space becomes %20). Base64 encodes the whole string as a sequence of AZ, az, 09, + and / characters, using a fixed mapping defined by RFC 4648. URL encoding stays mostly readable; Base64 produces a continuous block of letters and digits.

Does it handle Unicode characters and emoji?

Yes. URL encoding uses UTF-8 byte sequences for any non-ASCII character. Base64 encoding first converts the text to UTF-8 bytes and then encodes the bytes, so emoji and non-Latin scripts round-trip without loss.

Why does hello+world decode to hello+world and not hello world?

The URL decoder follows the URI component rule (RFC 3986), where + is a literal plus sign and a space is written as %20. The other convention, used in HTML form submissions and query strings (application/x-www-form-urlencoded), treats + as a space. If your input came from a form submission and you want the form-style result, replace + with a space before decoding.

What is URL-safe Base64?

Standard Base64 uses the characters + and /, which both have special meanings in URLs. URL-safe Base64 replaces them with - and _, and usually omits the trailing = padding. It is the form used inside JSON Web Tokens (JWT). Toggle the option on the Base64 encode or Base64 decode modes to switch between the two variants.

Why does my Base64 decode fail?

Common reasons: characters outside the Base64 alphabet (anything other than AZ, az, 09, +, /, and = for standard Base64); wrong padding (such as a single = where two are expected, or extra trailing characters); or a mix of URL-safe and standard characters in the same string. The decoder is lenient about missing trailing = padding (this is allowed by RFC 4648 §3.2 and is the normal form for URL-safe Base64). The error message shows what the parser saw.

Are there length limits?

There is no fixed limit set by this tool. Practical limits come from browser memory. Inputs of a few megabytes work quickly on a modern device. Very long inputs slow down the live update because the result is recomputed on every keystroke.

Does the tool change my data?

URL encoding and Base64 encoding are reversible: encoding then decoding returns the exact original text, including Unicode characters and whitespace. The only normalisation happens when decoding a URL string where the input was already partly encoded — in that case decoding turns the percent escapes back into their original characters, which is the intended behaviour.