TapCub 正式上线:统计、分析、客服一个平台免费用

免费工具 Base64 解码 / 编码在线工具(含图片转 Base64)

粘贴一段 Base64,马上看到里面是什么;中文转 Base64 不会乱码;把图片拖进来,直接拿到 Data URI 和 <img> 代码。解码出错时,会告诉你是哪个字符、在第几行第几列,以及结果到底是文字还是一个文件。

  • 文字、图片、文件都能转
  • 出错时说清原因
  • 本地处理,不上传
编解码器

Base64 解码或编码

示例是一条打包成 Base64 的统计事件,有些统计 SDK 就是这样把 JSON 塞进网址参数的。切换模式、粘贴你自己的内容,或者把图片直接拖到这个框里。

要解码的 Base64,或要编码的文字。带 data:…;base64, 前缀也能认。截图后可以直接粘贴到这里。

编码时用。解码时两种字母表都自动识别。

一般选 UTF-8。老系统、老网页导出的中文可能是 GBK(只能解码)。

结果
{"event":"支付成功","properties":{"amount":199,"channel":"微信","utm_source":"newsletter"}}

原始数据(字节)

97

编码前的数据大小。

Base64(字符)

132

不算换行。

全部在你的浏览器里计算。这里输入的任何内容都不会上传,TapCub 也不会保存。

版本 v1.0更新于 更新记录

结果怎么看

一段 Base64 能告诉你什么

Base64 的用处是让字节穿过只收文字的地方:JSON、网址、邮件、HTML 属性。解码还原的是字节,字节代表什么,取决于当初是怎么生成的。

标准还是 URL 安全

两套字母表只差两个字符。标准 Base64 用 + 和 /,这两个字符在网址里有特殊含义;URL 安全格式(Base64URL)换成 - 和 _,通常还去掉末尾的 =。JWT 一律用 URL 安全格式。

末尾的 =

每 3 个字节编成 4 个字符。数据长度不是 3 的倍数时,最后一组用 1 个或 2 个 = 补齐。= 不带数据,所以很多系统直接省掉。

为什么大了三分之一

Base64 结果约是原数据的 4/3,换行另算。30 KB 的图片转成 Base64 大约 40 KB(gzip 之前)。这是把二进制塞进文字的代价。

是文字还是文件

解码后会看开头几个字节:PNG、JPEG、GIF、WebP、SVG、PDF、ZIP 能认出来,给预览和下载;不是合法文字的数据显示十六进制,而不是一堆乱码。

Base64 是编码,不是加密。不需要任何密钥就能解开,所以用 Base64 包着的 token、密码、手机号,和明文一样谁都能看。

怎么用

三种常见用法

按手上有的东西选模式。

  1. 1

    解码一段 Base64

    直接粘贴。换行、缺 =、URL 安全字符都能处理;有问题时会写出第几行第几列。中文乱码就换一下「文字编码」。

  2. 2

    把文字转成 Base64

    切到「文字 → Base64」再输入。放进网址参数时选 URL 安全、去掉 =;写邮件正文时勾「每 76 个字符换行」。

  3. 3

    图片转 Base64

    选文件、拖进来,或直接粘贴截图。复制 Data URI,或者现成的 <img> 标签和 CSS 写法。

编码规则

3 个字节怎么变成 4 个字符

Base64(RFC 4648)把每 3 个字节(24 位)切成 4 份、每份 6 位,再用 64 个字符的字母表各写成一个字符。下表是 RFC 第 10 节的测试向量。

  • n 个字节带填充编码后是 4 × ⌈n ÷ 3⌉ 个字符
  • 邮件(MIME,RFC 2045)每行最多 76 个字符;PEM 格式的密钥和证书每行 64 个(RFC 7468);网址和 JWT 不换行
  • JavaScript 的 btoa() 只收 U+00FF 以内的字符,中文要先转成 UTF-8 字节,本工具就是这样做的
  • 各语言的标准写法:PHP base64_encode、Java Base64.getEncoder()、Python base64.b64encode,它们都对字节编码,中文先按 UTF-8 转字节
RFC 4648 测试向量:输入字节与 Base64 结果
输入字节数Base64填充
f1Zg==2 个 =
fo2Zm8=1 个 =
foo3Zm9v无
foob4Zm9vYg==2 个 =
fooba5Zm9vYmE=1 个 =
foobar6Zm9vYmFy无
例子

同样两个字,Base64 却不一样

Base64 编的是字节,所以结果取决于文字按什么编码变成字节、用的是哪套字母表。下面的值都用 Python base64 模块核对过。

同一输入在不同设置下的 Base64
输入设置Base64为什么不同
中文UTF-85Lit5paH每个汉字 3 个字节(E4 B8 AD、E6 96 87)
中文GBK1tDOxA==每个汉字 2 个字节(D6 D0、CE C4),按 UTF-8 解会乱码
中文UTF-16LELU6HZQ==每个字 2 个字节,低位在前
你好UTF-85L2g5aW9和 PHP base64_encode("你好")(UTF-8 文件)一致
<<???>>标准PDw/Pz8+Pg==含 / 和 +,直接放进网址会出问题
<<???>>URL 安全PDw_Pz8-Pg换成 - 和 _,去掉 =

「Base64 解出来是乱码」,多数时候 Base64 本身没错,是文字编码对不上:老系统、老网页导出的数据常是 GBK。先在下拉里换编码试试,再怀疑数据。

常见错误

Base64 出问题,多半在这几处

编码本身很简单,麻烦几乎都出在它周围。

用 btoa() 直接编码中文

btoa("中文") 会报 InvalidCharacterError;用 Latin-1 绕过去得到的结果,别的系统也解不对。先转成 UTF-8 字节再编码。

+ 在网址里变成了空格

标准 Base64 不做 URL 编码就放进查询参数,表单式解码会把每个 + 变成空格,对方就解不出来。用 URL 安全格式,或者把值做百分号编码。

大图片也做成 Data URI

Data URI 比原文件大三分之一,不能单独缓存,还会拖慢它所在的 HTML 或 CSS。只适合小图标;小程序里大图建议走文件上传,而不是 base64 字符串。

把 Base64 当成加密

Base64 什么都藏不住。Basic 认证头里的账号密码、JWT 载荷、「隐藏」字段里的数据,谁看到都能解开。

常见问题

Base64 常见问题

还有其他问题?

直接和 TapCub 团队聊聊——工作日通常几小时内回复。

Base64 怎么在线解码?

把字符串粘贴进来,模式选「Base64 → 文字」即可。换行、data:…;base64, 前缀、缺少的 =、URL 安全的 - _ 都会自动处理;结果如果是图片等文件,会显示预览和下载链接,而不是一堆乱码。中文乱码时把「文字编码」换成 GBK 试试。

图片怎么转 Base64?

模式选「图片 / 文件 → Base64、Data URI」,然后选择文件、拖进框里,或直接粘贴截图。会同时给出纯 Base64、data:image/png;base64,… 这样的 Data URI,以及可以直接粘贴的 <img> 和 CSS 写法。文件只在浏览器里读取,不会上传。

Base64 怎么转成图片?

把图片的 Base64 或 Data URI 粘贴进来解码,工具按开头的字节认出 PNG、JPEG、GIF、WebP、SVG 等格式,直接显示图片并提供下载。

Base64 和 Base64URL 有什么区别?

Base64URL(RFC 4648 第 5 节)把 + 换成 -、/ 换成 _,放进网址和文件名都安全,通常还去掉末尾的 =。JWT 用的就是它。其余完全相同,本工具两种都能解。

Base64 是加密吗?安全吗?

不是加密,没有密钥,谁都能还原。它只是让字节能在只收文字的地方传递。要保护数据请加密;要确认数据没被改过,用签名或 SHA-256 这类哈希(MD5 / SHA-256 生成器)。

btoa() 编码中文为什么报错?

JavaScript 的 btoa() 只收 U+00FF 以内的字符,中文和 emoji 会报 InvalidCharacterError。先用 TextEncoder 把文字转成 UTF-8 字节,再对字节做 Base64,本页就是这样处理的。

我粘贴的内容会被上传吗?

不会。解码、编码和读文件都在你的浏览器里完成,不上传;这个工具也不生成分享链接,粘贴的 token 和文件只留在你的电脑上。

更新记录

更新记录

这个工具的新功能、修复和数据更新,最新的在前。

  1. · v1.0

    首次上线首次上线。

缺功能或发现错误?告诉我们,常被提到的会排进下次更新。 全部工具更新

下一步

采集事件,不必把数据压成字符串

网站上一段异步脚本,App 和小程序用 SDK,后端发生的事情走服务端 API,都进同一个项目。

看清数据,找到增长。

每一次点击,都有数据依据。装好一行代码,1 分钟看到第一批数据。

无需信用卡 · 统计与客服都有免费版 · 统计无 Cookie