JSON Formatter
Paste messy or minified JSON and get it back pretty-printed with 2-space indentation. The same step tells you whether the JSON is valid.
Turn percent-encoded text back into readable characters: %20 becomes a space and %26 an ampersand. It uses the browser's decodeURIComponent.
Updated
Your browser is preparing the tool. It runs 100% locally.
Paste percent-encoded text and the tool decodes it with the browser's decodeURIComponent, turning %20 back into a space, %2F into a slash and %C3%A9 into é. Watch for one thing: a plus sign stays a plus, because the plus-for-space rule applies only to HTML form data. Malformed codes, such as a lone percent sign, raise an error instead of a guess. Decoding happens on your device.
Paste a percent-encoded value, the kind you see in a URL or query string, and you get the readable original back. Each %-code becomes the character it stands for, and runs of UTF-8 %-codes are reassembled into accented letters, non-Latin scripts and emoji.
It reverses URL component encoding exactly. What encodeURIComponent turned into %-codes, decodeURIComponent turns back, so text that goes through the encoder and then this decoder comes out unchanged.
The tool runs your text through JavaScript's decodeURIComponent. It looks for a percent sign followed by two hex digits, replaces each such sequence with the byte it stands for, then reads runs of bytes as UTF-8 to rebuild multi-byte characters.
It leaves plus signs alone. In a URL a plus is a literal plus. Only HTML form submissions use a plus to mean a space, and decodeURIComponent doesn't follow that convention. If your text came from a submitted form, replace the plus signs with spaces before decoding.
%20 → space
%2F → slash
%3D → equals
%26 → ampersand
%C3%A9 → é
plus sign → stays a plus (not a space)a%2Fb%3Fc%3Dd → a/b?c=dOnly percent-codes are decoded. A plus is left unchanged, because it means a space only in HTML form data.
A built-in browser function does the decoding, and the text you paste is never uploaded. You can decode URLs that carry private parameters without sending them anywhere.
Decoding reveals whatever was encoded, because percent-encoding isn't encryption. If a value still looks scrambled after decoding, it was encrypted or hashed separately. This tool only undoes the percent-encoding layer.
| Method | decodeURIComponent (browser built-in) |
|---|---|
| Decodes | percent-codes, including UTF-8 sequences |
| Plus sign | left as a plus (not a space) |
| Invalid input | raises an error, does not guess |
| Reverses | encodeURIComponent (the URL encoder) |
| Where it runs | On your device; pasted text stays there |
A plus sign isn't turned into a space. In query strings from HTML forms a plus means a space, but decodeURIComponent doesn't apply that rule. If your input came from a submitted form, replace each plus with a space first.
Malformed input raises an error. A lone percent sign, or a percent followed by anything other than two hex digits, is invalid, and the tool reports it instead of returning a wrong guess. Find the stray percent and fix it.
It only undoes percent-encoding. If the decoded text still looks like gibberish, it was probably also Base64-encoded, encrypted or hashed, and this tool doesn't touch those layers.
Decoding the same text twice can corrupt it. If a value was encoded once, decode it once, because a second pass can turn a legitimate %25 (an encoded percent sign) into a bare percent and misread what follows.
It expects UTF-8. Percent-codes for bytes from another character set may come out as the wrong characters, since modern URLs assume UTF-8.
Make a long, encoded query string human-readable.
See the real values inside an encoded API call or redirect.
Decode percent-encoded parameters captured in server logs.
Pull a readable search term or path out of an encoded link.
If the text came from an HTML form where a plus means a space, replace each plus with a space and then decode. Text that looks like Base64 rather than percent-codes needs a Base64 decoder, and the URL encoder handles the opposite direction.
The browser's decodeURIComponent decodes the percent-codes, including UTF-8 runs. It leaves a plus sign as a plus, since plus-for-space is a form-data rule, and a malformed percent sequence raises an error rather than producing a wrong guess.
Paste messy or minified JSON and get it back pretty-printed with 2-space indentation. The same step tells you whether the JSON is valid.
Decode Base64 back to readable text in your browser, Unicode included, and get a plain error message when the input is broken.
Percent-encode a value so it can sit safely inside a URL. Spaces, ampersands, slashes and other special characters become %-codes, using the browser's encodeURIComponent.
Encode any text to standard Base64 in your browser, emoji and accented letters included.
Get the MD5, SHA-1, SHA-256, SHA-384 and SHA-512 hashes of any text at once, updated as you type, with a plain note on which ones are still safe for security work.
Generate up to 500 random version 4 UUIDs at once, the 128-bit identifiers used for database keys, from your browser's secure random generator.
Paste or pick your input at the top of the page. The conversion runs on this device and needs no account.