URL Encode & Decode
Paste a URL or a query value and it is percent-encoded or decoded right away.
Stays in your browserRFC 3986WHATWG URLAs of 2026.10.03
Input
Output
How to use URL Encode & Decode
- 1Paste a URL or some text into the input panel, or press Sample.
- 2Choose a direction (Encode, Decode), a scope (Component, Full URL, Form), and a character encoding. The result updates as you go.
- 3Press Copy to copy the result, or Download to save it as a .txt file. Swap moves the result back into the input and reverses the direction.
URL Encode & Decode options
- Direction
- Encode turns characters into %XX sequences. Decode turns %XX sequences back into characters. The default is Encode. Swap moves the result into the input and reverses the direction.
- Scope
- Component (default) encodes one value the way encodeURIComponent does, including / ? & and =. Full URL keeps the separators of a URL, like encodeURI. Form follows application/x-www-form-urlencoded, where a space becomes + and, when decoding, + becomes a space.
- Character encoding
- UTF-8 (default), EUC-KR (CP949), or Shift_JIS (CP932). The two legacy encodings are for older Korean and Japanese systems that do not use UTF-8 in URLs.
- URL breakdown table
- When the input is a complete URL that starts with a scheme such as https://, a table shows the protocol, host, path, and each query key and value in decoded form. On by default.
Percent-encoding and how this tool behaves
A URL can only contain a limited set of ASCII characters. Everything else is written as a percent sign followed by two hexadecimal digits for each byte, as defined in RFC 3986. This tool gives the same results as the JavaScript functions encodeURIComponent and encodeURI. In Component scope the letters, digits, and - _ . ! ~ * ' ( ) are left as they are. Full URL scope also keeps ; / ? : @ & = + $ , #.
Form scope follows the application/x-www-form-urlencoded rules of the WHATWG URL Standard. Only letters, digits, and * - . _ are kept, and a space becomes +.
When you decode in Full URL scope, escapes that stand for a separator, such as %2F or %3F, are kept as written. This matches decodeURI, and it means the structure of the URL does not change.
Legacy encodings: EUC-KR and Shift_JIS
The bytes behind a percent-encoded character depend on the character encoding. 제 is %EC%A0%9C in UTF-8 and %C1%A6 in EUC-KR. Today almost everything uses UTF-8, but URLs from older Korean and Japanese systems may still use EUC-KR or Shift_JIS. Here EUC-KR means CP949 and Shift_JIS means CP932, as defined in the WHATWG Encoding Standard, which is also what browsers use.
In these encodings the second byte of a character can be an ASCII letter. For example, 똠 in EUC-KR is the two bytes 8C 63, which is written as %8Cc. The tool reads such sequences correctly when decoding.
URL Encode & Decode examples
Encode a query value (defaults: Encode, Component, UTF-8)
The & and = inside the value are encoded too, so they cannot be mistaken for query separators.
Input
제킬로 dev&tools=1
Output
%EC%A0%9C%ED%82%AC%EB%A1%9C%20dev%26tools%3D1
Encode a whole URL (Scope: Full URL)
Separators such as ://, /, ?, and = are kept. Only the Korean text and the space change.
Input
https://dev.zekilo.com/ko/검색?q=a b
Output
https://dev.zekilo.com/ko/%EA%B2%80%EC%83%89?q=a%20b
Form encoding (Scope: Form)
The space becomes a plus sign.
Input
a b&c=제
Output
a+b%26c%3D%EC%A0%9C
Encode as EUC-KR (Character encoding: EUC-KR)
The same text is %EC%A0%9C%ED%82%AC%EB%A1%9C in UTF-8.
Input
제킬로
Output
%C1%A6%C5%B3%B7%CE
Marks that stay as they are (Component)
Input
!'()*~
Output
!'()*~
A sequence that is cut off (Direction: Decode)
The error is reported with the position where the broken sequence starts: line 1, column 1.
Input
%E0%A4%A
Output
E_URI_MALFORMED
Examples use the reference cases this tool is tested against.
URL Encode & Decode: frequently asked questions
Is my input sent to a server?
No. Your input and the result are processed only in this browser and are not stored. Reloading the page clears them.
What is the difference between Component and Full URL?
Component treats the input as a single value, so characters with a meaning in a URL, such as / ? & = and #, are encoded as well. Use it for one query value or one path segment. Full URL treats the input as a complete address and leaves those separators alone, so the result is still a working URL.
When does a space become %20 and when does it become +?
In Component and Full URL scope a space becomes %20. In Form scope it becomes +, which is how HTML forms and most query strings are written. When decoding, + is turned into a space only in Form scope.
How do I read a URL like %B0%CB%BB%F6 that decodes into garbage?
That URL was most likely encoded as EUC-KR rather than UTF-8. Choose Decode and set the character encoding to EUC-KR (CP949). For URLs from older Japanese sites, try Shift_JIS (CP932).
Why do I get a malformed percent-encoding error?
A percent sign must be followed by two hexadecimal digits, and the decoded bytes must form valid characters in the selected encoding. The error tells you the line and column where the broken sequence starts. It often means the text was cut off while copying.
What happens to characters that EUC-KR or Shift_JIS cannot represent?
You get a note with the number of such characters, and each one is written as a numeric reference such as 😀 in percent-encoded form. Browsers do the same when they submit a form from a page in a legacy encoding.
Related tools
How it works · Standards
- Processed in: this browser (your device). Nothing is sent or stored.
- Standards: RFC 3986 · WHATWG URL
- Engine: ZEKILO Dev URL encoder and decoder (in-house code) · EUC-KR and Shift_JIS encoding tables (built from the WHATWG Encoding indexes) (BSD 3-Clause (WHATWG))
- Legacy encodings are decoded with the browser's own TextDecoder and encoded with tables built from the WHATWG Encoding indexes.
- A lone surrogate is encoded as U+FFFD (%EF%BF%BD).
- Empty input is not an error. The output is simply empty.
- As of 2026.10.03
- Changelog: 2026.10.03 First release