Base64 和 URL 编码有什么区别

Base64 用来把字节表示成文本,URL 编码用来让 URL 组件里的文本安全通过,两者不能互相替代。

Base64 和 URL 编码都是编码机制,但不能互相替代。Base64 把字节表示成文本,URL 编码让文本在 URL 的特定位置里安全存在。

用错以后,值看起来也许像是“编码过”,但放到目标位置就会坏。

Base64 表示字节

Base64 把二进制数据变成一套文本字母表。它适用于系统要求文本、但你需要携带字节的场景。

常见例子:

  • 在 JSON 里嵌入小段二进制值。
  • 检查使用 Base64URL 的 Token 片段。
  • 通过只接受文本的通道传递字节。
  • 为小资源创建 data URL。

当问题是“这个 Base64 值代表什么字节或文本”时,用 Base64 编码 / 解码

URL 编码保护 URL 边界

URL 编码,也叫百分号编码,用来转义 URL 中有特殊含义的字符。例如 query 参数值里可能需要保留 ?&=/ 或空格。

常见例子:

  • 编码搜索关键词。
  • 传递内嵌 redirect URL。
  • 构造 OAuth callback 参数。
  • 解码复制出来的 query string。

当问题是“这段文本放进 URL 组件后还能不能保持原意”时,用 URL 编码 / 解码工具

Base64URL 是特殊情况

Base64URL 调整了 Base64 字母表,让它更适合出现在 URL 里,通常会替换 +/,有时省略 padding。JWT 就使用这种形式。

但 Base64URL 仍然是在把字节表示成文本。它不能替代任意 URL 参数的百分号编码。

怎么选择

先看值要去哪里:

  • 二进制数据进入文本:Base64。
  • 文本进入 query 参数:URL encode。
  • 一个 URL 放进另一个 URL:编码内层 URL。
  • 检查 JWT header 或 payload:Base64URL decode。
  • 表单值:使用接收方期待的 form encoding 规则。

调试线索

如果看到 %2F%3D%26,通常是 URL 编码。如果看到由字母、数字、+/_- 组成的长文本,可能是 Base64 或 Base64URL。

先把编码类型叫对,修 bug 会快很多。

相关工具

使用本文提到的工具

Base64 编码 / 解码base64 / encode / decodeURL 编码 / 解码url / uri / encode

继续学习相关格式

Base64 课程从零理解 Base64 编码:二进制转文本、填充、URL 场景与常见误区。URL 编码课程理解百分号编码、查询字符串,以及 encodeURI 与 encodeURIComponent 的区别。

返回文章列表