Paste an emoji into most Base64 tools and watch it come back broken. This one doesn’t do that.

Free data tool

Base64 & URL Encoder / Decoder

Correctly handles Unicode and emoji, unlike most online converters. Nothing you paste here is uploaded.

0 characters in · 0 characters out

Base64 vs. URL encoding, in one sentence each

Base64 turns any data into a fixed set of 64 safe ASCII characters, commonly used for embedding binary data (images, tokens, credentials) inside text formats like JSON or a data URL. URL encoding only replaces the specific characters that break URLs, like spaces and &, with a % plus a hex code, so a query string can safely contain arbitrary text.

Base64 / URL encoder FAQ

What is Base64 encoding used for?

Base64 turns arbitrary binary data into plain ASCII text using 64 safe characters, which is why it shows up in data URLs, email attachments (MIME), API tokens and JSON Web Tokens. It makes binary data safe to put somewhere that only expects text.

What is URL encoding (percent-encoding)?

URL encoding replaces characters that aren't safe in a URL, like spaces, & and ?, with a percent sign followed by their hex code, for example a space becomes %20. It's what happens automatically when you see a messy string in your browser's address bar after searching for something with special characters.

Why does my Base64 input fail to decode?

Valid Base64 only contains letters, digits, + and /, padded with = to a multiple of 4 characters. Decoding fails if the text has been truncated, has extra whitespace mixed in from a copy-paste, or was never Base64 to begin with (URL-encoded data looks similar but isn't the same format).

Does this handle emoji and non-English characters?

Yes. Many Base64 tools built on the older escape/unescape trick corrupt emoji, accented letters and non-Latin scripts. This tool uses the browser's TextEncoder and TextDecoder APIs, which handle full Unicode correctly in both directions.

Is my data uploaded anywhere?

No. Everything runs in your browser using JavaScript. Nothing you type or paste is sent to a server, which makes this safe to use for API tokens, credentials, or anything else you'd rather not paste into a random website.

Embed this free tool on your site

Paste this where you want the tool to appear. Please keep the credit link — it is how we keep these tools free.

Free Base64 & URL encoder/decoder by ANUPRESS

Why emoji breaks so many Base64 tools

A lot of online Base64 converters are built on a decades-old trick using JavaScript’s escape() and unescape() functions, which only understand Latin-1, a character set with no room for emoji, most non-English scripts, or anything outside the first 256 Unicode code points. Paste in “café” or a CJK character or an emoji and the round trip quietly corrupts it. This tool uses TextEncoder and TextDecoder, the browser’s own Unicode-aware APIs, so full UTF-8 text encodes and decodes correctly every time.

Base64 shows up in more places than you’d expect

It’s the format behind data URLs (an image embedded directly in CSS or HTML instead of a separate file), the payload sections of a JSON Web Token, email attachments under MIME, and a lot of API authentication headers that expect “username:password” Base64-encoded. If you’ve ever seen a long string of letters, digits and = signs in a config file or an HTTP header, there’s a good chance it was Base64.

URL encoding solves a different problem

Where Base64 re-encodes everything, URL encoding (also called percent-encoding) only touches the characters that would otherwise break a URL: spaces become %20, & becomes %26, and so on. You’ll need this when building a query string by hand, debugging a webhook payload, or figuring out why a link with special characters in it stopped working.

Reading the error messages

Decoding fails loudly rather than silently returning garbage. A Base64 decode error almost always means stray whitespace got mixed in from a copy-paste, or the string was truncated somewhere along the way. A URL-decode error means there’s a stray % not followed by two valid hex digits, which usually means the text wasn’t URL-encoded to begin with.