Base64 解码

Base64 输入
0 字符

免费在线 Base64 解码工具,将 Base64 字符串还原为原始文本,支持多字符集,适合接口排查和日志还原。

相关推荐

什么是 Base64 解码?

Base64 解码是 Base64 编码的逆过程:将 Base64 字符串(如 SGVsbG8=)还原为原始的文本或二进制数据。Base64 是一种将二进制数据用 64 个可打印 ASCII 字符(A-Z、a-z、0-9、+、/)表示的编码方法,定义在 RFC 4648 标准中。

**解码的常见用途:** Base64 编码广泛用于 HTTP Basic Authentication 头、JWT Token 的 payload 段、API 响应字段、Data URI(如 data:image/png;base64,...)、邮件附件 MIME 编码、数据库 BLOB 字段存储等场景。解码这些内容是日常开发和调试的高频操作。

**解码的关键步骤:** Base64 解码时需要正确处理:①字符集(UTF-8 用于多字节字符如中文,ASCII 用于纯英文);②Padding(=)填充,长度必须是 4 的倍数;③URL-safe 变体(- 和 _ 替代 + 和 /);④换行和空格(标准 Base64 不含换行,MIME 变体每 76 字符换行)。

**浏览器原生支持:** 浏览器原生提供 `atob()` 函数用于 Base64 解码,但仅支持 Latin-1(ISO-8859-1)字符集。处理中文等多字节字符时需要先用 `TextDecoder('utf-8')` 转换 UTF-8 字节序列。本工具自动处理这些细节,支持 UTF-8 解码,无需手动转换。

**本地处理隐私:** 所有解码操作在浏览器内完成,输入的 Base64 字符串不上传任何服务器,可放心用于解码 API 响应中的敏感 token、日志中的用户数据等。

适用场景

  • 解码接口返回的 Base64 字段查看原始内容
  • 还原日志中的 Base64 编码数据
  • 恢复配置文件中的 Base64 编码值
  • 排查 Base64 解码报错原因(填充缺失、非法字符等)
  • 解码 JWT Token 的 header 和 payload 段查看用户信息
  • 解码 HTTP Basic Authentication 凭证查看用户名密码
  • 还原 Data URI Scheme 中的图片或资源数据

使用方法

  1. 粘贴需要解码的 Base64 字符串
  2. 选择字符集(UTF-8/ASCII/ISO-8859-1)
  3. 工具自动进行 Base64 解码并显示结果
  4. 复制解码结果用于后续调试或文档记录

功能特点

  • 实时双向转换:输入即解码,300ms 防抖延迟,无需手动触发
  • 多字符集支持:UTF-8、ASCII、ISO-8859-1 三种字符集,覆盖中文/英文/多语言场景
  • URL-safe Base64 兼容:自动处理 - 和 _ 字符替换,支持无 Padding 格式
  • 非法字符检测:解码失败时提示具体错误位置,快速定位格式问题
  • 一键复制与下载:支持复制解码结果到剪贴板,或下载为 .txt 文本文件
  • 自动 Padding 处理:自动补全或去除 = 填充字符,无需手动调整长度
  • MIME 变体支持:识别并处理每 76 字符换行的 MIME Base64 格式(邮件附件常用)

代码示例

JavaScript:浏览器原生 atob() 解码(仅支持 Latin-1)

javascript

使用浏览器原生 API 解码纯英文 Base64。处理 UTF-8 中文需要用 TextDecoder。

// 标准 Base64 解码(纯英文 / Latin-1)
function b64Decode(str) {
  try {
    return atob(str);
  } catch (e) {
    return '解码失败: ' + e.message;
  }
}

console.log(b64Decode('SGVsbG8gV29ybGQ=')); // "Hello World"

// UTF-8 中文解码(推荐)
function b64DecodeUtf8(str) {
  const binary = atob(str);
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i < binary.length; i++) {
    bytes[i] = binary.charCodeAt(i);
  }
  return new TextDecoder('utf-8').decode(bytes);
}

console.log(b64DecodeUtf8('5LiW55WM')); // "中文"

Python:base64 库解码(含 URL-Safe)

python

Python 标准库 base64 同时支持 Standard 和 URL-Safe 两种模式,可灵活切换。

import base64

# Standard 解码
encoded = 'SGVsbG8g5LiW55WM'  # "Hello 中文"
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded)  # Hello 中文

# URL-Safe 解码
url_encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.urlsafe_b64decode(url_encoded + '=' * (4 - len(url_encoded) % 4))
print(decoded.decode('utf-8'))

# MIME 解码(去除换行后)
mime_encoded = 'SGVs\nbG8g\nV29y\nbGQ='
decoded = base64.b64decode(mime_encoded.replace('\n', '')).decode('utf-8')
print(decoded)  # Hello World

# 自动忽略非法字符
import re
cleaned = re.sub(r'[^A-Za-z0-9+/=]', '', encoded)
decoded = base64.b64decode(cleaned).decode('utf-8')
print(decoded)

Java:java.util.Base64 解码(多种变体)

java

Java 标准库提供完整 Base64 支持,包括 RFC 4648 / URL-Safe / MIME 三种变体。

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64DecodeExample {
    public static void main(String[] args) {
        String encoded = "SGVsbG8g5LiW55WM"; // "Hello 中文"

        // Standard 解码
        byte[] decoded = Base64.getDecoder().decode(encoded);
        System.out.println(new String(decoded, StandardCharsets.UTF_8));

        // URL-Safe 解码
        byte[] urlDecoded = Base64.getUrlDecoder().decode(encoded);
        System.out.println(new String(urlDecoded, StandardCharsets.UTF_8));

        // MIME 解码(自动处理换行)
        String mime = "SGVs\nbG8g\nV29y\nbGQ=";
        byte[] mimeDecoded = Base64.getMimeDecoder().decode(mime);
        System.out.println(new String(mimeDecoded, StandardCharsets.UTF_8));

        // 错误处理
        try {
            Base64.getDecoder().decode("invalid@base64");
        } catch (IllegalArgumentException e) {
            System.err.println("解码失败:" + e.getMessage());
        }
    }
}

常见问题

为什么 Base64 解码时会报 InvalidCharacterError?

常见原因包括:混入了空格/换行/引号等非法字符、Padding(=)数量不正确、或使用了 URL-safe 变体(-/_ 替代 +//)。建议先用 Base64 清理工具预处理再解码。

解码后看到乱码怎么办?

可能是字符集选择错误。如果原文是中文,请选择 UTF-8 字符集;如果是纯英文或二进制数据,可尝试 ASCII 或 ISO-8859-1。

URL-safe Base64 和普通 Base64 解码有什么区别?

URL-safe Base64 使用 - 和 _ 替代 + 和 /,且通常省略末尾的 = Padding。解码前需要将 -/_ 还原为 +//,并补全正确的 Padding。

Base64 解码适合接口联调吗?

非常适合。很多 API 响应、OAuth Token、回调参数和中间件日志都会把内容做 Base64 封装,解码后可直接查看原始数据。

如何解码 JWT Token 的 header 或 payload?

JWT 使用 Base64URL 编码(URL-Safe 变体)。粘贴 JWT 第一段(header)或第二段(payload),选择 URL-Safe 模式即可解码。注意第三段是签名,不应单独解码验证。

支持解码大文件吗?

工具无显式大小限制,但浏览器对超大文本处理性能下降。解码 10MB 以上 Base64 字符串可能导致页面卡顿,建议分段解码或使用 Node.js / Python 脚本。

Padding 缺失怎么办?

工具会自动补全 Padding(= 字符)到 4 的倍数。URL-safe 变体常省略 padding,工具会智能识别并补全。

Base64 解码是解密吗?

不是。Base64 是编码(可逆),不是加密(不可逆)。任何人都可以解码 Base64。如果是敏感数据,应使用 AES 等真正的加密方案。

浏览器原生 atob 函数和工具解码效果一样吗?

对纯英文相同,但浏览器原生 atob() 只支持 Latin-1 字符集,无法直接处理 UTF-8 中文。本工具自动处理 UTF-8 字节转换,等价于 atob() + TextDecoder 的组合。

解码结果支持导出吗?

支持。一键复制到剪贴板,或下载为 .txt 文本文件。下载的文件使用 UTF-8 编码,可被任何文本编辑器或 Excel 打开。

术语表

Base64
基于 64 个可打印 ASCII 字符的二进制到文本编码方法,定义在 RFC 4648 中。每 3 字节编码为 4 字符,体积增大约 33%。
atob()
浏览器原生提供的 Base64 解码函数(ASCII to Binary)。仅支持 Latin-1 字符集,处理 UTF-8 中文需配合 TextDecoder 使用。
Padding(填充)
Base64 编码末尾用 = 字符补齐到 4 的倍数。解码时通常自动去除 padding。URL-safe 变体常省略 padding。
URL-Safe Base64
RFC 4648 §5 定义的 URL 安全变体,用 - 和 _ 替代 + 和 /,避免 URL 编码问题。常用于 JWT、OAuth PKCE 等场景。
MIME Base64
RFC 2045 规定的每 76 字符插入 CRLF 换行的 Base64 变体,主要用于电子邮件附件传输。
UTF-8
Unicode 字符集的可变长编码,中文 3 字节、英文 1 字节。Base64 解码时需指定 UTF-8 才能正确还原多字节字符。
InvalidCharacterError
浏览器 atob() 在遇到非 Base64 字符(如空格、换行、中文)时抛出的错误。提示输入包含非法字符。
Latin-1 (ISO-8859-1)
单字节字符集,覆盖西欧语言。浏览器原生 atob/btoa 只支持这个字符集,无法直接处理 UTF-8 中文。

Base64 三种变体对比

解码前先识别输入的 Base64 变体类型,选择对应模式以避免乱码或报错。

特性StandardURL-SafeMIME
特殊字符+ /- _+ /
Padding(=)使用通常省略使用
换行每 76 字符换行
标准RFC 4648 §4RFC 4648 §5RFC 2045
典型场景Data URI、通用编码JWT、URL参数、文件名邮件附件、SMTP传输
解码注意需补全 Padding先替换 -_ 为 +/ 再解码需去除换行后解码

5 种 Base64 解码常见错误对照表

遇到解码错误时,按下表快速定位原因。

错误类型可能原因解决方法
InvalidCharacterError包含空格、换行或非 Base64 字符清理输入字符串或使用 Base64 Clean 工具
解码后乱码字符集选择错误(中文用了 Latin-1)切换为 UTF-8 字符集
URL 参数中报错使用了 URL-Safe 字符(-_)但按标准解码先替换 -_ 为 +/ 再解码
Padding 不对长度不是 4 的倍数补全 = 字符至长度 % 4 = 0
空字符串输入只有空白或换行清除空白后重新输入

Authoritative References