Base64 Encoder and Decoder
Encode and decode UTF-8 text as standard or URL-safe Base64.
Encode or decode URL components, complete URLs, query strings, and form-style data using UTF-8 percent-encoding.
Choose the correct context because reserved characters, spaces, plus signs, and URL delimiters behave differently in each mode.
Your text is processed in this browser and is not submitted to UnicodeNow.
Operation
URL encoding is context-sensitive. A slash is data in a component, structure in a full URL, and ordinary text in some form values.
Encode or decode one URL component. Reserved URL syntax characters are treated as data.
Preserve mode assumes valid percent escapes are already encoded and should not be encoded again.
Decoded text is plain text. It is not automatically safe for HTML, JavaScript, SQL, shell commands, redirects, navigation, or security decisions.
Decoded reserved characters may change URL structure if the result is reused as a URL.
This tool converts Unicode text → UTF-8 bytes → percent escapes, and reverses that process one layer at a time. It supports four contexts: URL component, full URL, query string, and form-style data. The context matters because the same character can be data in one place and syntax in another.
All processing happens locally in your browser. The tool does not navigate to URLs, fetch remote content, preview pages, or execute decoded output.
A URL component is one piece of data, so reserved characters such as /, ?, &, =, and # are encoded. For example, component input café 😀/test?x=1 becomes caf%C3%A9%20%F0%9F%98%80%2Ftest%3Fx%3D1. In full URL mode, those delimiters remain structural while Unicode in the path, query, or fragment is encoded.
This prevents a common mistake: applying component encoding to an entire URL. If https:// is encoded as data, the colons and slashes become percent escapes and the result is no longer a normal URL string. Full URL mode validates that the input is an absolute URL and keeps the scheme, host, port, path separators, query delimiter, and fragment delimiter in their structural roles.
Query string mode treats & and the first = in each parameter as syntax. It encodes names and values separately, preserves parameter order, keeps repeated keys, and distinguishes empty values from keys without explicit values where the text form allows it.
For example, empty= has an explicit empty value, while flag has no explicit value. The tool keeps both forms visible instead of converting them into the same shape. It also does not sort parameters, because ordering can matter for signatures, cache keys, tests, and legacy APIs.
application/x-www-form-urlencoded uses a special space rule: space → +, while a literal plus sign becomes %2B. That behavior belongs to form-style data and should not be applied to ordinary URL component decoding.
Unreserved characters are A-Z a-z 0-9 - . _ ~ and usually remain literal. Reserved characters include : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Reserved characters may remain as URL structure or be encoded as data depending on the selected context.
é has UTF-8 bytes C3 A9, so its percent-encoding is %C3%A9. 😀 has UTF-8 bytes F0 9F 98 80, so it becomes %F0%9F%98%80. Percent escapes represent bytes, not Unicode code-point notation.
Malformed percent text such as %, %2, %GG, or abc%4Z is rejected. After percent syntax is valid, the decoded bytes are checked as strict UTF-8. Byte sequences such as %C3, %ED%A0%80, and %F4%90%80%80 are syntactically valid percent escapes but invalid UTF-8.
Those two checks are reported separately because they point to different problems. A malformed percent escape is a syntax error in the encoded text. Invalid UTF-8 means the percent escapes were well formed, but the byte sequence does not represent valid Unicode text under UTF-8.
Encoding an already encoded percent sign adds another layer: space → %20 → %2520. Decode mode intentionally decodes one layer only. If %2520 is decoded, the result is %20, not a space, and the tool reports that another layer may remain.
Decoded output is plain text. It is not automatically safe for HTML, JavaScript, SQL, shell commands, redirects, navigation, authentication checks, or security decisions. Full URL decode mode warns because decoded reserved characters can change path segmentation or query structure if the output is reused as a URL.
This tool runs in your browser. Your input is not submitted to UnicodeNow. Output is written as text, and downloads use Blob URLs that are revoked after use.
Input:
Hello, café 😀
URL component:
Hello%2C%20caf%C3%A9%20%F0%9F%98%80
Input:
hello world+café
Form-style:
hello+world%2Bcaf%C3%A9
It converts UTF-8 bytes into percent escapes where required by URL syntax.
Percent-encoding represents a byte using % followed by two hexadecimal digits.
A component treats reserved syntax as data; a full URL preserves structural delimiters such as :, /, ?, &, = and #.
Ordinary URL percent-encoding uses %20. Form-style encoding uses + for spaces.
It is the percent-encoded byte for /.
Because UTF-8 encodes U+00E9 as bytes C3 A9, and each byte is percent-encoded.
No. This tool never navigates, fetches or previews URLs.
It is another encoding layer, such as a space becoming %20 and then %2520.
%2520 decodes one layer to %20; %20 decodes to a space.
No. Malformed escapes such as %2 or %GG are reported as errors.
Yes. Percent bytes are decoded as strict UTF-8.
No. It only changes representation.
No. + means space in form-style decoding, but remains literal in ordinary component decoding.
No. This tool runs in your browser and does not submit input to UnicodeNow.
Encode and decode UTF-8 text as standard or URL-safe Base64.
Convert text to and from Unicode escape sequences and numeric entities.
Escape and unescape JSON string content safely.
Escape JavaScript string literals and decode JS escape notation without eval.
Encode and decode HTML named, decimal and hexadecimal entities.
Convert text to UTF-8 bytes and validate byte sequences.
Convert UTF-8 text bytes into hexadecimal values.
Decode hexadecimal byte values into UTF-8 text.
Inspect each Unicode character, encoding, category, script and normalization form.
Unicode defines characters and code points. UTF-8 encodes those code points as bytes for files, databases, web pages, APIs and network messages.
A safe workflow for diagnosing broken UTF-8, validating bytes, reversing mojibake, handling double encoding and auditing repairs.
Learn how Unicode escape syntax works across JavaScript, JSON, Python, PHP, Java, HTML, CSS and URLs.
Compare literal Unicode characters, named HTML entities, numeric character references, code points and UTF-8 bytes.