为什么要base64编码
为什么要base64编码
Base64 是一种 基于ASCII的 二进制到文本编码 方法,主要用于将二进制数据转换成可打印的 ASCII 字符,以便安全传输和存储,例如在电子邮件、URL 以及 JSON Web Token(JWT)中常见。
那ASCII为什么不行呢?
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于7位或8位二进制的字符编码标准,用于表示文本字符。标准ASCII码范围是0-127,扩展 ASCII 码(如 ISO-8859-1 或 Windows-1252)范围128-255。
好的总结下,二进制文件(如图片、音频、视频、压缩文件)可能包含任意8位字节(0-255),其中许多值无法用标准ASCII直接表示。
问题 | 直接传输 ASCII | Base64 解决方案 |
---|---|---|
无法表示所有二进制数据 | ASCII 仅适用于文本,不能覆盖 0-255 的所有字节 | Base64 使用 6 位编码,转换成可打印字符 |
控制字符可能影响传输 | CR 、LF 、NULL 等字符可能导致协议误解 | Base64 避免了控制字符问题 |
某些协议不支持 8 位字符 | 早期 SMTP、HTTP 可能不支持 | Base64 仅使用可打印字符,兼容性更好 |
数据完整性风险 | 特殊字符可能被错误解析或丢弃 | Base64 避免这些问题 |
难以调试 | 二进制数据不直观 | Base64 仍然是可打印文本,便于查看 |
上方表格来自chatgpt总结。
代码
import base64
from scipy.io import wavfile
if __name__ == "__main__":
readPath = "2001000001.wav"
with open(readPath, "rb") as fr: # 二进制读取
audioData = fr.read()
if audioData:
b64Data_bytes = base64.b64encode(audioData) # 转换为base64编码
b64Data_string = b64Data_bytes.decode("utf8") # 转换为字符串
print(b64Data_string)
audioData = base64.b64decode(b64Data_string) # 字符串解码为二进制数据,假设服务端请求也是字符串格式
with open("my.wav", "wb") as fw:
fw.write(audioData)