Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

Encoding Toolkit (All-in-one)

Every encoding side by side — paste anything and it works out how to decode it.

Developer No upload Works offline Free, no sign-up

Text is encoded as UTF-8. Nothing leaves your browser.

Encoded

Type or paste something above to see it in every encoding.

Base64 & Base32

Base64

RFC 4648, with = padding

 

Base64URL

URL-safe alphabet (- _), no padding — as in JWTs

 

Base32

RFC 4648 (A–Z, 2–7), as in TOTP secrets

 

Base32hex

RFC 4648 extended hex alphabet (0–9, A–V)

 

Web

URL encoding

Percent-encoding, as encodeURIComponent

 

Form encoding

application/x-www-form-urlencoded: spaces become +

 

HTML escape

Only & < > " ' — safe to put text into HTML

 

HTML entities (named)

Non-ASCII as named entities where they exist (&eacute;), else &#x…;

 

HTML entities (numeric)

Non-ASCII as decimal references (&#233;)

 

Punycode

RFC 3492, the raw encoding (no xn--)

 

Domain name (IDN)

Internationalised domain in its ASCII xn-- form

 

Unicode escapes

JavaScript / JSON escapes

\uXXXX for non-ASCII, \n, \" and \\ — paste between double quotes

 

Python escapes

Python’s unicode_escape: \xe9, \u2615, \U0001f600

 

CSS escapes

For CSS strings and content: \E9, \1F600

 

Unicode code points

U+XXXX for every character

 

Bytes

Hexadecimal

Base16: two hex digits per UTF-8 byte

 

Binary

Eight bits per byte

 

Other bases

Base58

Bitcoin alphabet (no 0 O I l)

 

Base62

0–9 A–Z a–z, the bytes read as one big number

 

Base36

0–9 a–z (case-insensitive), the bytes read as one big number

 

ASCII85

Adobe variant with <~ ~>, as in PostScript and PDF

 

Z85

ZeroMQ RFC 32, for data in 4-byte blocks

 

Base85

RFC 1924 alphabet, as Python’s b85encode and git

 

Email & legacy

Quoted-printable

RFC 2045, as in email bodies

 

uuencode

Unix-to-Unix encoding with begin/end lines

 

Rotation ciphers

ROT13

Letters shifted by 13 — applying it again decodes

 

ROT47

Printable ASCII shifted by 47 — applying it again decodes

 

Next steps

About the Encoding Toolkit (All-in-one)

Paste any text and see it in 27 encodings at once: Base64 and Base64URL, Base32 and Base32hex, Base58, Base62, Base36, ASCII85, Z85 and Base85, hexadecimal and binary, URL and form encoding, HTML escapes and entities, JavaScript/JSON, Python and CSS escapes, Unicode code points, Punycode and internationalised domain names (IDN), quoted-printable, uuencode, ROT13 and ROT47.

Paste something encoded instead and the auto-detector tries every decoder, throws away readings that produce gibberish and shows the likely ones first — so a mystery string from a log file, an email source or a URL is decoded in one step. Each result can be copied or used as the new input, to peel off several layers. Everything runs in your browser: nothing is uploaded.

How to use it

  1. Type or paste text into the input. Every encoding updates as you type.
  2. If the input is already encoded, look at Looks like…: the most likely reading is first, with the decoded text.
  3. Use Copy on any result, or Use as input to decode or encode it again (for example, Base64 inside URL encoding).
  4. To encode raw bytes rather than text, switch the input to Hex bytes and paste hex such as 48 65 6c 6c 6f.
  5. Type in Filter (for example base or escape) to show only the encodings you need.

Examples

Decode a mystery string
Input
SGVsbG8sIFRvb2xWZXJzZSEg4pyTIGNhZsOpIPCfmIA=
Result
Most likely Base64 → Hello, MySmartCoPilot! ✓ café 😀
Internationalised domain name
Input
münchen.de
Result
Domain name (IDN): xn--mnchen-3ya.de
Punycode (whole text, no xn--): mnchen.de-q9a

The IDN row converts each label of the domain and adds xn--, which is what DNS and certificates use; paste the xn-- form to get the Unicode name back. The Punycode row encodes the whole text as one string, so it suits single labels: münchen → mnchen-3ya.

Same text, different escapes
Input
café 😀
Result
JavaScript/JSON: caf\u00E9 \uD83D\uDE00
Python: caf\xe9 \U0001f600
CSS: caf\E9  \1F600
HTML: caf&eacute; &#x1F600;
Email body in quoted-printable
Input
Gr=C3=BC=C3=9Fe aus K=C3=B6ln
Result
Most likely quoted-printable → Grüße aus Köln

Common uses

  • Figuring out what an encoded string in a log, cookie, token or email header actually says.
  • Escaping text for JavaScript, JSON, Python, CSS or HTML source code.
  • Converting internationalised domain names to and from their xn-- form for DNS records and certificates.
  • Encoding binary data (as hex) for configuration files, test fixtures or protocols that need Base32, Base58 or ASCII85.
  • Comparing encodings to pick the shortest one for a payload.

How the auto-detector decides

Every decoder runs on your input. A reading is shown only when the decoder accepts the input completely (no invalid characters, correct lengths and padding) and the result looks like real text — mostly letters, digits, punctuation and spaces — or like a known file type such as PNG, JPEG, PDF or ZIP. Readings are ranked by how strongly the input's shape points to each encoding: %41 suggests URL encoding, &amp; HTML, \u0041 an escape, <~…~> ASCII85, xn-- a domain name.

Some bases (Base58, Base62, Base36, Z85, Base85) accept almost any word, so their readings appear only when they decode to plain ASCII text. Short inputs can be valid in several encodings at once; check the decoded text before you rely on it.

Notes on the encodings

  • Base64/Base32/hex follow RFC 4648. Decoding accepts missing padding, line breaks, either Base64 alphabet and lower-case Base32.
  • Base58 uses the Bitcoin alphabet; Base62 (0–9 A–Z a–z) and Base36 (0–9 a–z) read the bytes as one big number, and leading zero bytes become leading 0s (the same convention as Base58). There is no single standard for Base62 or Base36 of text, so other tools may differ.
  • ASCII85 is the Adobe variant with <~ ~> and z for four zero bytes; Z85 (ZeroMQ) needs data in blocks of 4 bytes; Base85 uses the RFC 1924 alphabet like Python's base64.b85encode and git.
  • Quoted-printable (RFC 2045) keeps line breaks and wraps long lines at 76 characters with soft breaks. uuencode writes a begin 644 data.txt header.
  • Punycode (RFC 3492) shows the raw encoding of the whole text; Domain name (IDN) converts a domain with the browser's own IDNA processing, the same that the address bar uses.
  • HTML entities use the full list of 2,231 named character references of the HTML Standard, and decode exactly as a browser does in text (including &copy without a semicolon).
  • Text is turned into bytes as UTF-8.

Limitations

  • Text is always read and written as UTF-8; legacy character sets (Windows-1252, Shift_JIS…) are not converted.
  • Base58, Base62 and Base36 are skipped for inputs over 4 KB, because their big-number conversion would make typing slow; everything else works up to 2 MB.
  • The auto-detector suggests readings — it cannot prove which encoding was used, especially for very short inputs.
  • Encryption is not encoding: ROT13 and ROT47 are puzzles, not protection.

Privacy

Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot.

Frequently asked questions

How do I know which encoding a string uses?

Paste it and read Looks like…. The detector tries every decoder and lists only the readings that decode cleanly into readable text, most likely first. If nothing is listed, the text is probably plain text, encrypted, compressed or in an encoding this tool does not cover.

What is the difference between Base64 and Base64URL?

Base64URL replaces + and / with - and _ and usually drops the = padding, so the result can sit in URLs and file names. JWTs use it. The decoder here accepts both.

Why do the JavaScript and Python escapes look different?

JavaScript and JSON write characters outside the Basic Multilingual Plane, such as emoji, as two \u escapes (a surrogate pair: \uD83D\uDE00), while Python writes one \U0001f600. Python also uses \xe9 for characters below 256. Both decode to the same text.

What does xn-- in a domain name mean?

It marks a label written in Punycode, the ASCII form of an internationalised domain name. xn--mnchen-3ya.de is münchen.de. Browsers show the Unicode form; DNS, email servers and certificates use the xn-- form.

Is my data sent anywhere?

No. All encoding and decoding happens in your browser, and the page works offline once loaded. Only the HTML entity list (about 30 KB) is downloaded from this site when the page opens.

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.