上传文件
  1. base64hub
  2. 文本工具
  3. Base64 编码器

Base64 编码:在线将文本转为 Base64

输入或粘贴文本,Base64 结果随输入实时生成。默认使用 UTF-8,带重音的字母、西里尔字母、中日韩文字和 Emoji 都能正确编码,还可选择 URL 安全、填充和换行。

免费 无需注册,不限次数 本地 不上传任何内容 27 种字符集,默认 UTF-8 更新于 2026年10月27日
输入 0 B输出 0 B大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何把文本编码为 Base64

  1. 在 输入 · 文本 框中输入或粘贴文本。页面打开时带有示例内容,按 清空 即可从头开始。
  2. 输入的同时,Base64 会出现在 输出 · Base64 中。输入特别大时,可以取消勾选 实时,改为按 运行。
  3. 按接收方的要求设置选项:URL 安全(- _)、不填充(=)、换行 和 字符集。默认设置(标准字母表、带填充、单行、UTF-8)适用于大多数 API。
  4. 按 复制输出,或按 下载 把结果保存为 base64.txt。
  5. 想验证能否还原,按 互换。它会把 Base64 移到输入框,并把工具切换为解码。

按钮下方会显示输入的字节数、输出大小和变化百分比,字段有长度限制时很有用。

Base64 编码的原理

Base64 处理的是字节,所以第一步是用某种字符集把文本转成字节(这里默认 UTF-8,除非你另选)。随后编码器每次取 3 个字节,也就是 24 位,拆成 4 个 6 位的数,再把每个数写成 64 字符字母表中的一个字符:A–Z、a–z、0–9、+ 和 /。

经典例子是文本 Man:字节 4D 61 6E 变成 TWFu。最后一组只有一两个字节时,输出用 = 补齐:Ma 变成 TWE=,M 变成 TQ==。完整的推导过程见 Base64 的工作原理,填充详解 则说明了什么时候可以省略 =。

n 个字节的输出长度总是 4 × ⌈n / 3⌉ 个字符,比输入多约 33%。Base64 大小计算器 可以算出任意大小对应的长度,Base64 的体积开销 解释了这在什么时候要紧。任何人都能还原 Base64,它什么也藏不住;往里面放机密信息之前,请先读读 编码与加密的区别。

编码选项

选项作用适用场景
URL 安全(- _)+ 变成 -,/ 变成 _(RFC 4648 第 5 节)URL、查询字符串、文件名、Cookie、JWT。Base64URL 编码器 默认开启此项
不填充(=)去掉末尾的 = 字符JWT 和大多数 URL 安全格式;以及任何反正会去掉 = 的场合
换行:76(MIME,LF 或 CRLF)每 76 个字符插入一个换行电子邮件正文和附件(MIME 编码器)
换行:64(PEM)每 64 个字符插入一个换行位于 -----BEGIN 和 -----END 行之间的证书和密钥
字符集编码前每个字符变成哪些字节一般用 UTF-8,除非接收方需要 UTF-16、Windows-1251、Shift_JIS 或其他传统编码

Unicode、Emoji 和 URL 安全输出示例

下面每个值都是用 Python 的 base64 模块生成的,与本工具的输出一致。

输入设置Base64
HelloUTF-8SGVsbG8=
Hello, world!UTF-8SGVsbG8sIHdvcmxkIQ==
caféUTF-8Y2Fmw6k=
caféISO-8859-1Y2Fm6Q==
€UTF-84oKs
€Windows-1252gA==
👋UTF-88J+Riw==
👋UTF-8,URL 安全,不填充8J-Riw
ПриветUTF-80J/RgNC40LLQtdGC
ПриветWindows-1251z/Do4uXy

同一个词在不同字符集下得到不同的 Base64,是因为字节不同:é 在 UTF-8 中是两个字节(C3 A9),在 Latin-1 中是一个字节(E9)。挥手 Emoji 占 4 个 UTF-8 字节,单独编码需要 8 个字符,其中两个是填充。

字符集与无法表示的字符

UTF-8 能表示所有 Unicode 字符,所以不会丢失任何内容。列表中的其余 26 种字符集(UTF-16LE/BE、UTF-32LE、ASCII、ISO-8859 和 Windows 代码页、KOI8-R/U、CP866、Shift_JIS、EUC-JP、GBK、Big5 和 EUC-KR)是为需要它们的系统准备的。如果文本中有所选字符集没有的字符,它会被替换为 ?,并有警告提示替换了多少个字符。例如 € 在 ISO-8859-1 下编码为 Pw==,其实就是一个问号。

Windows 和 .NET 字符串以及 PowerShell 请选 UTF-16LE,原因见 UTF-16 转 Base64。如果系统必须拒绝 7 位文本以外的任何内容,请选 ASCII(ASCII 转 Base64)。

换行

普通的 Base64 是一整行,JSON、HTTP 请求头、URL 和环境变量需要的正是这种形式。电子邮件使用 76 字符一行(RFC 2045),PEM 文件使用 64 字符一行。换行选项会按该宽度插入 \n 换行符;选择 76 (MIME, CRLF) 时插入的是 CRLF。解码器(包括 本站的解码器)会跳过换行,所以换行后的输出解码出的字节不变。MIME 规则见 电子邮件中的 Base64。

常见的编码错误

  • 混入了末尾换行符。 echo Hello | base64 输出 SGVsbG8K,因为 echo 会加上 \n。单独的文本 Hello 是 SGVsbG8=。请使用 printf '%s';在这里粘贴时,也检查一下输入字节数是否符合预期。
  • btoa() 遇到 Unicode 会报错。 在浏览器中,btoa("Grüße 👋") 会抛出 InvalidCharacterError,因为 btoa 只接受 Latin-1 字符。请像下面的代码片段那样,先编码成 UTF-8 字节。
  • 接收方用的是另一种字符集。 你按 UTF-8 编码,对方按 Latin-1 解码,café 就会变成 café。事先约定字符集,或者在这里直接选择接收方的字符集。
  • 编码了两次。 SGVsbG8= 的 Base64 是 U0dWc2JHOD0=。如果一个值解码后还是 Base64,说明流程中某一步又编码了一次。
  • + 和 / 会破坏 URL。 在查询字符串中,+ 会被当成空格。请使用 URL 安全选项或 Base64URL 编码器,或者对值做百分号编码。

在 JavaScript、Python 和命令行中进行 Base64 编码

在浏览器 JavaScript 中,先用 TextEncoder 把字符串转成 UTF-8 字节,再对字节编码。较新的浏览器可以直接调用 bytes.toBase64()(Uint8Array.toBase64)。

const bytes = new TextEncoder().encode("Grüße 👋");
let bin = "";
for (const b of bytes) bin += String.fromCharCode(b);
btoa(bin);                                   // "R3LDvMOfZSDwn5GL"

// Node.js
Buffer.from("Grüße 👋", "utf8").toString("base64");     // "R3LDvMOfZSDwn5GL"
Buffer.from("👋", "utf8").toString("base64url");         // "8J-Riw"

在 Python 中,b64encode 接收字节并返回字节:

import base64

base64.b64encode("Grüße 👋".encode("utf-8")).decode("ascii")
# 'R3LDvMOfZSDwn5GL'
base64.urlsafe_b64encode("👋".encode()).rstrip(b"=").decode()
# '8J-Riw'

在 Linux 和 macOS 上,base64 命令会编码标准输入:

printf '%s' 'Grüße 👋' | base64
base64 -w 0 file.bin > file.b64

第一条命令输出 R3LDvMOfZSDwn5GL。Linux 上的 GNU base64 默认每 76 列换行,-w 0 可以关闭换行;macOS 版本除非指定,否则不换行。更多语言和边界情况:JavaScript 中的 Base64、Node.js、Python 和 PHP。

要编码的是文件而不是文本?

图片、PDF 和其他任何文件都可以交给文件编码器处理,支持 data URI 和 JSON 输出。

文件转 Base64

常见问题

怎样对字符串做 Base64 编码?

把字符串粘贴到上方的输入框,再从输出框复制结果。在代码中,先把字符串转成 UTF-8 字节,再对这些字节编码:Python 用 base64.b64encode(s.encode()),Node.js 用 Buffer.from(s).toString("base64")。

为什么 Base64 结尾会有 = 或 ==?

Base64 以 3 个字节为一组处理数据。输入长度不是 3 的倍数时,最后一组不完整,就用 = 标出缺少的字节:剩 2 个字节补一个 =,剩 1 个字节补 ==。详见 填充详解。

同样的文本,为什么在别处编码出来的 Base64 不一样?

通常是字节层面有看不见的差异:末尾多了换行符(echo 会自动加一个)、字符集不同(UTF-8、Latin-1 还是 UTF-16),或者 Unicode 规范化方式不同。可以对比工具下方显示的输入字节数。

Base64 编码能用来隐藏密码吗?

不能。Base64 没有密钥,任何人一秒钟就能解码。它适合用来传输数据,要保护数据请使用真正的加密或哈希。参见 编码与加密的区别。

文本经过 Base64 编码后会变大多少?

每 3 个字节变成 4 个字符,所以输出大约多 33%,如果换行还要再加上换行符。100 字节的 UTF-8 文本会变成 136 个字符。