# Base64 编码解码工具

URL: https://byshahid.com/zh/tools/base64-encoder-decoder/
Author: Muhammad Shahid (https://byshahid.com/)
免费工具 · 在浏览器中运行

把文本编码为 Base64，或把 Base64 解码回文本，支持表情符号和中文，可选 URL 安全格式。

**快速解答:** Base64 把任何数据转换成由 64 个安全字符组成的文本，使其能通过只处理文本的系统，例如 JSON、URL 或电子邮件。它是编码，不是加密：任何人都能解码。URL 安全 Base64（Base64URL）用 - 和 _ 替换 + 和 /，并去掉填充，JWT 使用的就是这种格式。

## 使用方法

1. **选择编码或解码.** 编码把文本转为 Base64；解码把 Base64 转回文本。
2. **粘贴输入.** 任何语言的文本都可以，因为会以 UTF-8 转换。
3. **按需选择 URL 安全.** 用于 URL、文件名和 JWT。

## 示例

带表情符号的文本，按 UTF-8 编码为 Base64：

输入:

```
Hello, world! 👋
```

输出:

```
SGVsbG8sIHdvcmxkISDwn5GL
```

## 常见错误及解决方法

- **InvalidCharacterError: The string contains characters outside of the Latin1 range**: btoa() 只接受 Latin-1 文本，所以中文会报错。先用 TextEncoder 把文本转成 UTF-8 字节（本工具就是这样做的），或在 Node.js 中使用 Buffer.from(text).toString('base64')。
- **The string to be decoded is not correctly encoded**: 输入里有非 Base64 字符，例如复制时带上的空格或换行，或者是使用 - 和 _ 的 URL 安全 Base64。删掉多余字符，或选择 URL 安全选项。
- **解码后的文字像 cafÃ© 这样乱码**: UTF-8 字节被当成 Latin-1 读取了。用 UTF-8 解码字节，例如使用 TextDecoder。
- **URL 里的 + 变成了空格**: 标准 Base64 使用 +，而 URL 会把它当成空格。使用 URL 安全 Base64，或用 encodeURIComponent 编码这个值。

## 常见问题

### Base64 是加密吗？

不是。Base64 只是改变数据的书写方式，任何人都能解码。机密信息请使用真正的加密。

### 为什么 Base64 会让数据变大？

每 3 个字节变成 4 个字符，所以编码后的数据大约大 33%。

### 什么是 URL 安全 Base64？

一种用 - 和 _ 代替 + 和 / 的变体，通常去掉 = 填充，因此可用于 URL 和文件名。

### 为什么解码后出现乱码？

输入可能不是文本（例如图片）、不是有效的 Base64，或使用了 URL 安全字母表。

### 我的数据会被上传吗？

不会。编码和解码都在浏览器中运行。

### 如何在 JavaScript 中进行 Base64 编码？

btoa() 适用于 ASCII 文本；对任意 UTF-8 文本，要先用 TextEncoder 转为字节，本工具就是这样做的。在 Node.js 中使用 Buffer.from(text).toString("base64")。

### 什么是 data URL？

一种把文件以 Base64 形式直接嵌入页面的方式，例如 data:image/png;base64, 后面接编码数据。

### Base64 末尾的 = 是什么？

填充字符，使长度成为 4 的倍数。URL 安全的 Base64 通常会省略它。

### 可以在这里编码图片或文件吗？

本工具编码文本。文件也能 Base64 编码，但体积会增大约三分之一。

### 标准 Base64 能直接用在 URL 中吗？

不能。它包含在 URL 中有特殊含义的 + 和 /，请改用 URL 安全的变体。

## 相关内容

- [JWT 解码器](https://byshahid.com/zh/tools/jwt-decoder/)
- [SHA-256 哈希生成器](https://byshahid.com/zh/tools/hash-generator/)
- [JSON 格式化与校验工具](https://byshahid.com/zh/tools/json-formatter/)

## 来源

- [RFC 4648: Base64 data encodings](https://www.rfc-editor.org/info/rfc4648)
