跳到正文

编码为Base64

文本、图片或任意文件——正确地转成Base64。带重音的字符和emoji都能完整保留,这是常见的一行代码实现做不到的。不存储任何内容。

  • 绝不存储
  • 无需排队,无需等待
  • 无需注册,无水印

文本按UTF-8编码,重音字符和表情符号都不会丢失。

Base64

Base64将显示在这里。

使用方法

1

粘贴文本或拖入文件

文本按UTF-8编码。文件逐字节编码,绝不会被存储。

2

选择格式

标准Base64、适用于令牌和查询字符串的URL安全Base64URL,或可直接粘贴到CSS或<img>标签中的完整data URI。

3

复制结果

复制结果;如果内容很大,也可以下载为文本文件。

为什么正好增大三分之一

Base64每次取三个字节,写成四个字符,每个字符承载二十四位中的六位。四除以三,就是那著名的33%的由来——这是算术,不是效率低下,只要限定在可打印字符范围内,没有任何编码器能做得更好。当数据不能被三整除时,最后一组会被补齐,并用一个或两个=号标记,所以任何Base64字符串的长度总是四的倍数。

Base64有两套字母表,选错字母表是人们来这里最常遇到的问题。标准字母表以+和/结尾,这两个字符在URL中都有特殊含义——加号在查询字符串中会变成空格,斜杠看起来像路径分隔符。URL安全变体改用-和_,JSON Web Token、文件名以及任何出现在网址中的内容都使用它。除此之外两者完全相同,而用一种编码、按另一种解码的值会以看似数据损坏的方式出错。

换行是另一个取决于使用场景的细节。邮件附件要求每行76个字符,PEM证书和密钥要求64个字符,而data URI或JSON字段则完全不能有换行。这里默认关闭换行,因为如今不换行才是常见情况;当目标是邮件头或-----BEGIN-----块时请开启它,因为它们会拒绝一整行超长的内容。

Base64不是加密,不提供任何保护。它只是换了一套字母表——任何人都能瞬间还原,任何安全扫描工具也会自动还原。它的用途是让二进制数据通过只接受文本的渠道传输:邮件正文、JSON字段、XML文档、样式表中的data URI。用它在配置文件里隐藏密码,对任何认真看一眼的人都毫无遮掩作用。

如果您需要的是别的

在命令行中,Linux上用base64 -w 0 file.bin可以不换行地编码,macOS上直接用base64效果相同,而openssl base64 -A在所有系统上都一样适用。对于URL安全字母表,basenc --base64url无需额外替换步骤就能正确处理。

对于大文件,这里的一切都不是合适的方法——整个文件都要放在内存中,而且还没开始做别的,编码就已经让它膨胀了三分之一。命令行工具采用流式处理,而在代码中,每种语言都有增量编码器。同样值得一问的是:到底需不需要Base64?以multipart/form-data或原始请求体发送二进制数据,既省内存,也免去那33%的膨胀。

常见问题

我的文本或文件会被存储吗?

不会。不存储任何内容,不记录任何日志,也没有任何服务器能看到它——断开网络后照样能用。对这类工具来说,这可不是锦上添花。人们粘贴到在线编码器和解码器里的,常常是正在使用的敏感信息:会话令牌、API密钥、Authorization请求头、客户记录。把这些粘贴到一个会把它们发送出去的页面,就等于泄露,无论该网站对删除作何承诺。

为什么这里能正确处理带重音的字符和emoji?

因为文本会先转换成UTF-8字节再进行编码,这是正确的顺序,而大多数简易实现都跳过了这一步。浏览器自带的`btoa`根本无法处理文本——它把每个字符当作一个字节,所以`btoa("café")`会直接报错。广为流传的变通写法`btoa(unescape(encodeURIComponent(s)))`只是碰巧能用,遇到emoji和基本范围以外的字符就会出错。本页面一次性正确地进行UTF-8编码,所以日本語和🎉都能完整保留,解码后完全一致。

什么是Base64URL?什么时候需要用它?

它是把两个字符替换过的Base64:+变成-,/变成_,并去掉末尾的=补齐符。之所以有它,是因为+、/和=在URL中都有特殊含义,普通Base64放进查询字符串或路径时会被破坏。JWT、OAuth令牌以及URL中的任何内容都使用Base64URL。如果您要把结果放进链接里,就选它。

Base64能加密或保护数据吗?

不能,这一点值得说得直白些。Base64是编码,不是加密——没有密钥,也没有任何秘密。任何看到这串字符的人都能一步解码,包括在本网站上。它的用途是让二进制数据安全地通过只接受文本的渠道,比如邮件附件和data URI。如果某些内容需要保密,就需要加密;Base64不提供任何保护。

为什么Base64比原文件大?

总是大约33%。Base64把每3个字节表示成4个文本字符,所以按设计大小就会增加三分之一,再加上少量补齐字符。这是把二进制转成文本的代价,也是为什么把大图片作为data URI嵌入CSS通常得不偿失。

可以把图片编码成data URI吗?

可以——拖入图片并选择data URI。您会得到完整的`data:image/png;base64,…`字符串,媒体类型已正确填好,可以直接粘贴到样式表、<img>标签或邮件模板中。

有大小限制吗?

取决于可用内存,而不是固定的大小上限,而且相当宽裕——几十MB的文件也能顺利编码。编码是分块进行的,专门为处理大文件而设计;显而易见的那种实现在约125 KB时就会因“Maximum call stack size exceeded”而崩溃,这是大量在线编码器都存在的bug。

小贴士: Base64会让数据增大约33%——这是格式本身决定的,并非缺陷。文件会被完整读入内存,所以超大文件可能在编码完成前就耗尽手机浏览器标签页的内存。默认不自动换行;邮件和PEM格式要求开启换行。

把这个工具放到您的网站上

博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。