如何将 Base64 转换为文本
- 把 Base64 字符串粘贴到 输入 · Base64 框中。空格、换行和两侧的引号都没问题。
- 在 输出 · 文本 中阅读文本。工具下方的状态行会说明输入是否为有效的 Base64、包含多少字节,以及内容看起来像什么。
- 如果输出中出现
�或奇怪的字母,请更改 字符集。自动检测 会检查字节顺序标记、UTF-8 和 UTF-16。 - 用 复制输出 复制文本,或用 下载 保存。
反方向转换请使用 文本转 Base64。
如何判断一个字符串是不是 Base64
Base64 字符串只使用 64 个字符,外加用于填充的 =。标准 Base64 含有 + 和 /;URL 安全变体则改用 - 和 _。带填充的字符串长度能被 4 整除,= 只能出现在末尾。
这些规则是必要条件,但不是充分条件。很多普通单词都能满足:Test 是有效的 Base64,解码后是三个毫无意义的字节 4D EB 2D。实用的检查方法是解码字符串,看看能不能得到有意义的内容。如果需要的不只是是或否的判断,Base64 校验工具 会指出字符串违反了哪条字符、长度或填充规则,并给出它是 Base64 的可能性评分。
示例
| Base64 字符串 | 文本 | 说明 |
|---|---|---|
VGhhbmsgeW91IQ== | Thank you! | 纯 ASCII |
SGVsbG8sIFfDtnJsZA== | Hello, Wörld | ö 在 UTF-8 中占两个字节 |
5L2g5aW9 | 你好 | 六个字节,每个字符三个 |
0J/RgNC40LLQtdGC | Привет | UTF-8 编码的西里尔文 |
QmFzZTY0IGlzIG5vdCBlbmNyeXB0aW9uLg== | Base64 is not encryption. | 任何人都能读出来 |
dXNlcm5hbWU6c2VjcmV0 | username:secret | HTTP Basic 认证请求头的格式 |
从最后一行可以看出,任何看到 Authorization: Basic 请求头的人都能读出其中的密码。Basic Auth 解码器 可以把这样的请求头拆分成用户名和密码,编码与加密 解释了为什么真正保证其私密性的是 HTTPS。
从字节到字符串
解码 Base64 得到的是字节。把字节变成字符串是需要字符集的第二步,大多数“文本不对”的问题都出在这一步。大多数语言会把这两步明确分开:
import base64
raw = base64.b64decode("SGVsbG8sIFfDtnJsZA==")
raw # b'Hello, W\xc3\xb6rld'
raw.decode("utf-8") # 'Hello, Wörld'
raw.decode("latin-1") # 'Hello, Wörld'
在 JavaScript 中,带 fatal: true 的 TextDecoder 会抛出 TypeError,而不是悄悄插入 �;如果你宁愿报错也不想存下损坏的文本,这很有用:
const bytes = Uint8Array.from(atob("Y2Fm6Q=="), c => c.charCodeAt(0));
new TextDecoder("utf-8", { fatal: true }).decode(bytes);
// TypeError: the bytes are not valid UTF-8
new TextDecoder("windows-1252").decode(bytes); // "café"
更多写法见 Python 和 JavaScript 页面。
输出不是可读文本时
- 大部分是符号,夹杂几个可读的单词。 字符串里装的是文件。查看状态行中的 看起来像,然后在 Base64 转文件 中打开,它可以预览并保存文件。
- 字母之间有空隙。 文本是 UTF-16。把 字符集 设为 UTF-16LE。
- 文本可读,但
é显示为é。 文本在被编码之前就已经在某处解码错了。Base64 没有问题,有问题的是源数据。 - 输出又是 Base64。 它被编码了两次。复制输出,粘贴为输入,再解码一次。
- 看起来随机的字节,也没有检测到格式。 数据很可能经过了加密或压缩。Base64 解码只是第一层;对于 gzip 或 zlib 数据,试试 gzip Base64 解码器。
常见问题
什么是 Base64 字符串?
只由 A–Z、a–z、0–9、+ 和 / 组成的文本,结尾常带有 = 或 ==。它代表的是字节,可能是文本、图片或任何其他文件,写成这种形式是为了能在只处理普通字符的系统中完好传递。
解码之前,怎么知道 Base64 字符串里是什么?
开头的几个字符往往就能说明:eyJ 是 JSON,PD94bWwg 是 XML,iVBORw0KGgo 是 PNG,JVBERi0 是 PDF。解码后,状态行会给出检测到的格式。见 常见 Base64 前缀。
在 Python 中怎么把 Base64 转换成字符串?
base64.b64decode(s).decode("utf-8")。第一个调用返回字节;.decode() 按你指定的字符集把它们转成 str。
为什么解码出来的文本又是一个 Base64 字符串?
这个值被编码了两次,当系统中的两层各自编码一次时就会这样。把输出粘贴回输入框,再解码一次即可。