上传文件
  1. base64hub
  2. 文本工具
  3. ASCII 转 Base64

ASCII 转 Base64:编码 7 位纯文本

使用 7 位 ASCII 字符集编码文本。ASCII 以外的字符会被替换为 ? 并计数,输入是否真的像看上去那样“纯”,一眼就知道。

免费 无需注册,不限次数 本地 不上传任何内容 0–127 仅限此范围,其余字符会被标出 更新于 2026年10月27日
输入 0 B输出 0 B大小 –

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

如何把 ASCII 文本编码为 Base64

  1. 在 输入 · 文本 中输入或粘贴文本。字符集 已预设为 ASCII。
  2. Base64 会显示在 输出 · Base64 中。如果文本中含有 ASCII 以外的字符,工具下方会出现警告,说明有多少个字符被替换成了 ?。
  3. 删除或替换这些字符;如果接收方支持 UTF-8,也可以把 字符集 切换为 UTF-8。
  4. 复制结果,或下载为 base64.txt。

反向转换请用 Base64 转 ASCII。

什么算 ASCII

ASCII 定义了 128 个编码,从 0 到 127,每个占一个字节,最高位为 0。编码 32 到 126 是可打印字符:空格、数字、英文字母和常用标点。编码 0 到 31 以及 127 是控制字符,例如制表符(9)、换行符(10)和回车符(13)。

其他任何字符都不是 ASCII,包括 é、ß、€、弯引号、不间断空格和 emoji。从文字处理软件和网页中粘贴的文本常常不知不觉地带着这类字符,典型的是排版用的引号和破折号,替换警告能把它们揪出来。

示例

文本Base64说明
Hello, ASCII!SGVsbG8sIEFTQ0lJIQ==与 UTF-8 相同
200 OKMjAwIE9L6 个字节,无填充
{}[]<>e31bXTw+标点就是普通的字节
a、制表符、bYQli制表符是字节 09
line1 CR LF line2bGluZTENCmxpbmUy中间是 0D 0A
user:passdXNlcjpwYXNzHTTP Basic 认证凭据
GrüßeR3I/P2U=2 个字符被替换为 ?
naïve cafébmE/dmUgY2FmPw==2 个字符被替换为 ?

每个字符编码为一个字节,所以体积也很容易预测:n 个字符得到 4 × ⌈n / 3⌉ 个 Base64 字符。

为什么 ASCII 和 Base64 密不可分

Base64 本来就是为只能安全传输 7 位 ASCII 的通道设计的。早期的电子邮件(SMTP)是经典例子:大于 127 的字节在传输途中可能被去掉或篡改,所以二进制附件和非英文文本都会被编码成所有系统都能处理的 ASCII 子集。这至今仍是 Base64 存在的理由,也解释了它的字母表:64 个可打印字符,在所有源自 ASCII 的字符集中都完全相同,而且除了 + 和 /,都不是常见格式中有特殊含义的字符。Base64 的工作原理详细讲解了其中的机制。

有些系统至今仍只接受 ASCII,例如传统接口和 HTTP 头的值,不同服务器对非 ASCII 字符的处理各不相同。在这里用 ASCII 字符集编码,可以在发送之前确认输入对它们是安全的。如果是 Authorization 请求头,Basic 认证请求头生成器能直接生成完整的 Basic dXNlcjpwYXNz 值。

用代码实现 ASCII 转 Base64

Python 默认会拒绝非 ASCII 字符,这本身就是一种有用的检查:

import base64

base64.b64encode("200 OK".encode("ascii")).decode()   # 'MjAwIE9L'
"Grüße".encode("ascii")
# UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3
"Grüße".encode("ascii", errors="replace")              # b'Gr??e', like this tool

在 JavaScript 中,btoa() 接受编码不超过 255 的所有字符,所以它发现不了 ü 这样的 Latin-1 字母。如果字符串必须是纯 ASCII,请先用 /^[\x00-\x7F]*$/.test(s) 检测。更多内容见 Python 和 JavaScript 页面。

常见问题

ASCII 转 Base64 和 UTF-8 转 Base64 有区别吗?

对纯 ASCII 文本没有区别。UTF-8 的设计让前 128 个字符保持 ASCII 的字节值不变,所以 Hello, ASCII! 在两者下都得到 SGVsbG8sIEFTQ0lJIQ==。只有文本中含有其他字符时才会不同。

ü 或 emoji 这样的字符会怎样?

ASCII 中没有它们的编码,所以每个都会变成 ?(字节 3F),工具会报告替换了多少个。Grüße 编码为 R3I/P2U=,解码后是 Gr??e。

Base64 的输出本身是 ASCII 吗?

是的。Base64 用到的全部 65 个字符(A–Z、a–z、0–9、+、/ 和 =)都是可打印的 ASCII 字符,所以 Base64 能通过只能处理 7 位文本的系统。

制表符、换行符这类控制字符能编码吗?

能。它们也是 ASCII(编码 0–31),和其他字节一样编码:a、制表符、b 得到 YQli。