Base64 code examples
Encoding and decoding "Hello, World!" in popular languages. Each one should print SGVsbG8sIFdvcmxkIQ==.
Base64 in JavaScript
btoa()/atob() only accept Latin-1, so convert through UTF-8 bytes to support all text. Modern browsers also offer Uint8Array.prototype.toBase64().
const original = "Hello, World!"; // emoji & accents work too
// Encode (UTF-8 safe)
const bytes = new TextEncoder().encode(original);
const encoded = btoa(String.fromCharCode(...bytes));
console.log(`Encoded: ${encoded}`);
// Decode
const binary = atob(encoded);
const decoded = new TextDecoder().decode(
Uint8Array.from(binary, (c) => c.charCodeAt(0))
);
console.log(`Decoded: ${decoded}`);
// Newer browsers / runtimes:
// const encoded = bytes.toBase64();
// const bytes = Uint8Array.fromBase64(encoded);Base64 in TypeScript
function base64Encode(input: string): string {
const bytes = new TextEncoder().encode(input);
let binary = "";
bytes.forEach((b) => (binary += String.fromCharCode(b)));
return btoa(binary);
}
function base64Decode(input: string): string {
const binary = atob(input);
const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));
return new TextDecoder().decode(bytes);
}
const original = "Hello, World!";
const encoded = base64Encode(original);
console.log(`Encoded: ${encoded}`);
console.log(`Decoded: ${base64Decode(encoded)}`);Base64 in Node.js
const original = "Hello, World!";
// Encode
const encoded = Buffer.from(original, "utf8").toString("base64");
console.log(`Encoded: ${encoded}`);
// Decode
const decoded = Buffer.from(encoded, "base64").toString("utf8");
console.log(`Decoded: ${decoded}`);
// URL-safe variant
const urlSafe = Buffer.from(original).toString("base64url");Base64 in Python
import base64
original = "Hello, World!"
# Encode
encoded = base64.b64encode(original.encode("utf-8")).decode("ascii")
print(f"Encoded: {encoded}")
# Decode
decoded = base64.b64decode(encoded).decode("utf-8")
print(f"Decoded: {decoded}")
# URL-safe variant
url_safe = base64.urlsafe_b64encode(original.encode()).decode()Base64 in Java
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String original = "Hello, World!";
// Encode
String encoded = Base64.getEncoder()
.encodeToString(original.getBytes(StandardCharsets.UTF_8));
System.out.println("Encoded: " + encoded);
// Decode
String decoded = new String(
Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
System.out.println("Decoded: " + decoded);
// URL-safe: Base64.getUrlEncoder(), MIME: Base64.getMimeEncoder()
}
}Base64 in C#
using System;
using System.Text;
class Program
{
static void Main()
{
string original = "Hello, World!";
// Encode
string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(original));
Console.WriteLine($"Encoded: {encoded}");
// Decode
string decoded = Encoding.UTF8.GetString(Convert.FromBase64String(encoded));
Console.WriteLine($"Decoded: {decoded}");
}
}Base64 in Go
package main
import (
"encoding/base64"
"fmt"
)
func main() {
original := "Hello, World!"
// Encode
encoded := base64.StdEncoding.EncodeToString([]byte(original))
fmt.Println("Encoded:", encoded)
// Decode
decodedBytes, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
fmt.Println("Error decoding:", err)
return
}
fmt.Println("Decoded:", string(decodedBytes))
// URL-safe: base64.URLEncoding, unpadded: base64.RawStdEncoding
}Base64 in Rust
Uses the base64 crate: cargo add base64
use base64::{engine::general_purpose::STANDARD, Engine as _};
fn main() {
let original = "Hello, World!";
// Encode
let encoded = STANDARD.encode(original);
println!("Encoded: {encoded}");
// Decode
let bytes = STANDARD.decode(&encoded).expect("invalid base64");
let decoded = String::from_utf8(bytes).expect("invalid UTF-8");
println!("Decoded: {decoded}");
}Base64 in PHP
<?php
$original = "Hello, World!";
// Encode
$encoded = base64_encode($original);
echo "Encoded: $encoded\n";
// Decode (strict mode rejects invalid characters)
$decoded = base64_decode($encoded, true);
echo "Decoded: $decoded\n";Base64 in C++
#include <iostream>
#include <string>
#include <vector>
static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
std::string base64_encode(const std::string &in) {
std::string out;
int val = 0, valb = -6;
for (unsigned char c : in) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
out.push_back(base64_chars[(val >> valb) & 0x3F]);
valb -= 6;
}
}
if (valb > -6) out.push_back(base64_chars[((val << 8) >> (valb + 8)) & 0x3F]);
while (out.size() % 4) out.push_back('=');
return out;
}
std::string base64_decode(const std::string &in) {
std::vector<int> T(256, -1);
for (int i = 0; i < 64; i++) T[base64_chars[i]] = i;
std::string out;
int val = 0, valb = -8;
for (unsigned char c : in) {
if (T[c] == -1) break;
val = (val << 6) + T[c];
valb += 6;
if (valb >= 0) {
out.push_back(char((val >> valb) & 0xFF));
valb -= 8;
}
}
return out;
}
int main() {
std::string original = "Hello, World!";
std::string encoded = base64_encode(original);
std::cout << "Encoded: " << encoded << std::endl;
std::cout << "Decoded: " << base64_decode(encoded) << std::endl;
return 0;
}Base64 in Bash
# Encode (printf avoids the trailing newline echo would add;
# single quotes stop the shell treating "!" as history expansion)
printf '%s' 'Hello, World!' | base64
# Decode (use -D on older macOS)
echo 'SGVsbG8sIFdvcmxkIQ==' | base64 --decode
# Encode a file without line wrapping (GNU coreutils)
base64 -w 0 image.png > image.b64Base64 in PowerShell
$original = "Hello, World!"
# Encode
$encoded = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($original))
Write-Output "Encoded: $encoded"
# Decode
$decoded = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($encoded))
Write-Output "Decoded: $decoded"
# Encode a file
[Convert]::ToBase64String([IO.File]::ReadAllBytes("image.png"))