Skip to main content

Base64 Decoder: Free Online Base64 to Text Converter

Paste a standard Base64 string and decode it back to plain UTF-8 text instantly. Handles emojis and Unicode, free and 100% in your browser — no uploads.

Base64 Input
0 chars
Plain Text Result
0 chars
Runs 100% in your browser
Standard RFC 4648 alphabet

Why Use Our Base64 Decoder?

Instant Decoding

Convert Base64 back to text in real-time as you paste, with instant results.

Unicode Support

Properly decodes UTF-8 characters, emojis, and international text without corruption.

Privacy First

Your Base64 strings are decoded entirely in your browser. No data ever reaches our servers.

Base64 Decoder: Convert Base64 to Plain Text Online

A Base64 decoder turns an encoded string of A–Z a–z 0–9 + / back into the original text. Paste your Base64 and this tool runs the browser's atob(), then rebuilds UTF-8 so emojis and accented letters decode cleanly. It reads the standard RFC 4648 alphabet, tolerates whitespace and missing padding, and runs 100% in your browser — free, no upload.

How to decode a Base64 string

  1. Paste your Base64 into the Base64 Input box, or click Paste to pull from your clipboard.
  2. The Plain Text Result updates instantly — the tool trims surrounding whitespace before decoding.
  3. Press Copy Result to send the decoded text to your clipboard, or Clear to start over.
  4. If you see "Invalid Base64 string", the input has a character outside the standard alphabet — see the URL-safe note below.
  5. Need the reverse? Use the Base64 Encoder to turn text back into Base64.

What is Base64 and how does decoding work?

Base64 packs binary data into 64 printable ASCII characters so it survives text-only channels like email, JSON, and URLs. Encoding splits bytes into 6-bit groups (26 = 64 symbols) and pads the end with = to a multiple of 4. Decoding reverses that: it maps each character back to 6 bits and reassembles the original 8-bit bytes. The mapping is fixed by RFC 4648, Table 1.

Browser atob() returns a raw binary string, one byte per character, which mangles any multi-byte UTF-8. This tool fixes that with decodeURIComponent(escape(atob(str))): escape percent-encodes each byte and decodeURIComponent stitches the bytes back into proper Unicode. That is why Y2Fmw6k= decodes to café here instead of the broken café a naive atob() produces. Per the spec:

"The encoding process represents 24-bit groups of input bits as output strings of 4 encoded characters."— RFC 4648, §4 (Base 64 Encoding)

Important: Base64 is encoding, not encryption. It scrambles nothing — anyone can reverse it in one step. For the difference between encoding, hashing, and encryption, read hashing vs encryption vs encoding.

Worked examples: Base64 → text

Standard string

SGVsbG8=Hello

Emoji / UTF-8

8J+agA==🚀  ·  Y2Fmw6k=café

Missing padding (still decodes)

SGVsbG8Hello — the trailing = is optional in the browser

Edge case · URL-safe input fails

PDw_Pz4- returns "Invalid Base64 string" because it uses the URL-safe alphabet (- and _). Convert it first — replace - with + and _ with / — so PDw/Pz4+ decodes to <<??>>. JWT segments are URL-safe, so decoding a token segment with -/_needs that swap; use the JWT Decoder for whole tokens.

Base64 reference: alphabet, padding & variants

These are the exact rules this decoder follows. The standard and URL-safe alphabets differ in only two characters — the 62nd and 63rd symbols — which is why a URL-safe string fails until you swap them.

PropertyStandard (RFC 4648 Table 1)URL-safe (Table 2)
Char 62 / 63+   /-   _
Padding char== (often omitted)
Output length4 chars per 3 bytes4 chars per 3 bytes
Decoded here?Yes — directlyNo — swap - + and _ / first
WhitespaceIgnored (spaces, tabs, newlines)Ignored after swap

The URL-safe trap most decoders gloss over

This tool decodes the standard RFC 4648 alphabet only. It does not auto-translate URL-safe characters: feed it - or _ and atob() throws, surfacing as Error: Invalid Base64 string. That is deliberate honesty — silently rewriting -+ could corrupt a string that legitimately ends in a dash. If your source is a JWT segment, a query parameter, or a filename token, swap -+ and _/ before pasting.

The good news: padding and whitespace are forgiving. The browser atob() follows the WHATWG forgiving-base64 rules, so SGVsbG8 (no =) and a string broken across newlines both decode fine. Only the alphabet itself is strict. So if decoding fails, check for -, _, or a stray symbol like ! or % first — not the padding.

Runs 100% in your browser

Your data never leaves your device. Decoding happens locally with atob() and your browser's native clipboard — no uploads, nothing leaves your device — which matters when you are inspecting auth headers or tokens. I tested this decoder against standard strings, missing padding (SGVsbG8), emoji and accented UTF-8 (8J+agA==, Y2Fmw6k=), newline-broken input, and URL-safe strings (PDw_Pz4-), which correctly fail until -/_ are swapped. Output stays instant.

Frequently asked questions

Is this Base64 decoder free?

Yes — 100% free with no signup and no usage cap. Paste a Base64 string and the decoded text appears instantly, ready to copy.

Does my data get uploaded?

No. Everything decodes in your browser with atob(). No input is sent to a server, so the tool works offline once the page loads.

Why do I get "Invalid Base64 string"?

The input contains a character outside the standard alphabet (A–Z a–z 0–9 + / =) after whitespace is removed. The usual culprits are URL-safe - or _, or a stray symbol like !.

Can it decode emojis and non-English text?

Yes. The decoder rebuilds UTF-8 with decodeURIComponent(escape(...)), so emojis (🚀), Arabic, and CJK scripts decode correctly instead of becoming mojibake.

Last updated: June 2, 2026 · Runs 100% in your browser — no uploads, nothing leaves your device.

Need a different tool?

Browse all 89 free, in-browser tools — or tell us what we should build next.

Browse all tools