Python 标准类库-因特网数据处理之Base64数据编码

这篇具有很好参考价值的文章主要介绍了Python 标准类库-因特网数据处理之Base64数据编码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能。它为RFC 3548中指定的编码提供编码和解码功能。定义了Base16、Base32和Base64算法,以及事实上的标准Ascii85和Base85编码。

RFC 3548 编码适用于对二进制数据进行编码,以便可以安全地通过电子邮件发送,用作URL的一部分,或作为HTTP POST请求的一部分。编码算法与uuencode程序不同。

该模块提供了两个接口。现代接口支持将字节类对象(bytes-like-objects)编码为ASCII字节,并将字节类对象或者包含ASCII的字符串转为字节。支持 RFC 3548 中定义的所有base64字母表。

遗留接口不支持从字符串解码,但它提供了与文件类对象之间的编码和解码功能。它只支持Base64标准字母表,并根据RFC 2045每76个字符添加换行符。

Python 3.3版本中变更:现代接口的解码功能所接受只有ASCII的Unicode字符串。

Python 3.4版本中变更:该模块中的所有编码和解码功能所接受任何字节类对象。增加了Ascii85/Base85支持。

现代接口

  • base64.b64encode(s, altchars=None)

    使用Base64对字节类对象 s进行编码,并返回编码后的字节。

    altchars 可选参数,必须是长度至少为2的字节类对象(多余的字符会被忽略),参数中给定字符按序分别用于替换编码后的字符集中的+/,等价于使用base64.urlsafe_b64encode(s) 。这允许应用程序生成例如URL或文件系统安全的Base64字符串。默认值为None,使用标准的Base64字母表。

  • base64.b64decode(s, altchars=None, validate=False)

    解码Base64编码的字节类对象或ASCII字符串 s,并返回解码后的字节。

    altchars 可选参数,必须是字节类对象或长度至少为2的ASCII字符串(多余的字符会被忽略),按序分别用于替换解码前s中与+, /的替代字符为+/,等价于base64.urlsafe_b64decode(s) 。如果未正确提供 s 值,将引发binascii.Error异常。

    validate 如果为False(默认值),则在填充检查前,将丢弃既不在标准 Base64 字母表之中也不在备用字母表中的字符。如果为True,这些非base64字符将导致binascii.Error

  • base64.standard_b64encode(s)

    使用标准Base64字母表对字节类对象 s 进行编码,并返回编码后的字节

  • base64.standard_b64decode(s)

    使用标准Base64字母表对字节类对象 s 进行解码,并返回解码后的字节

  • base64.urlsafe_b64encode(s)

    使用 URL 与文件系统安全的字母表编码字节类对象s,使用 - 以及 _ 分别代替标准 Base64 字母表中的 +/。返回编码后的字节。结果中可能包含 =

  • base64.urlsafe_b64decode(s)

    使用 URL 与文件系统安全的字母表解码字节类对象 s,使用 - 以及 _ 分别代替标准 Base64 字母表中的 +/。返回解码后的字节。

  • 查看参考官方文档,获取更多现代接口

示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import base64

str = 'param1=a>2&url=http://www.example.com/?type=1'
byte_obj = str.encode()
# print(byte_obj) # 输出:b'param1=a>2&url=http://www.example.com/?type=1'
print(base64.b64encode(byte_obj))
#输出:b'cGFyYW0xPWE+MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8/dHlwZT0x'

encoded_obj = base64.b64encode(byte_obj, altchars=b'-_')
print(encoded_obj)
#输出:b'cGFyYW0xPWE-MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8_dHlwZT0x'

print(base64.b64decode(encoded_obj, altchars=b'-_'))
#输出:b'param1=a>2&url=http://www.example.com/?type=1'
#print(base64.b64decode(encoded_obj))
#报错 binascii.Error: Incorrect padding

print(base64.b64decode(str)) # 输出:b'\xa5\xaa\xda\x9bV\xb6\xba\xb9'


str2 = 'hello Mr授客'
byte_obj2 = str2.encode('utf-8')
encoded_obj2 = base64.standard_b64encode(byte_obj2)
print(encoded_obj2) # 输出:b'aGVsbG8gTXLmjojlrqI='
print(base64.standard_b64decode(encoded_obj2).decode('utf-8')) # 输出:hello Mr授客


encoded_obj3 = base64.urlsafe_b64encode(byte_obj)
print(encoded_obj3)
#输出:b'cGFyYW0xPWE-MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8_dHlwZT0x'

print(base64.urlsafe_b64decode(encoded_obj3))
#输出:b'param1=a>2&url=http://www.example.com/?type=1'

历史接口

  • base64.decode(input, output)

    解码二进制input文件的内容,并将生成的二进制数据写入output文件。inputoutput必须是文件类对象。input将被读取,直到input.readline()”返回一个空字节对象。

  • base64.decodebytes(s)

    解码字节类型对象ss必须包含一行或多行base64编码的数据,并返回解码后的字节。3.1版新增。

  • base64.decodestring(s)

    decodebytes()的别名,3.1版本中废弃。

  • base64.encode(input, output)

    对二进制input文件的内容进行编码,并将生成的base64编码数据写入output文件。inputoutput必须是文件类对象。input将被读取,直到input.read()返回一个空字节对象。base64.encode()output的每76个字节后插入一个换行符(b'\n'),并确保output始终以换行结束,如RFC 2045 所示(MIME)。

  • base64.encodebytes(s)

    对可以包含任意二进制数据的字节类对象 s 进行编码,并返回包含base64编码的字节数据。base64.encode()在输出的每76个字节后插入一个换行符(b'\n'),并确保输出始终以换行结束。

    版本3.1中新增

  • base64.encodestring(s)

    encodebytes()别名,版本3.1中废弃。文章来源地址https://www.toymoban.com/news/detail-461951.html

示例

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import base64

# 注意:必须以二进制文件打开、写文件,否则会报错
with open('./input.txt', 'rb') as input:
    with open('output.txt', 'wb') as output:
        base64.encode(input, output)
        
base64_byte_data = b'cGFyYW0xPWE+MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8/dHlwZT0x'
print(base64.decodebytes(base64_byte_data))
#输出:b'param1=a>2&url=http://www.example.com/?type=1'

print(base64.encodebytes(b'param1=a>2&url=http://www.example.com/?type=1'))
#输出:b'cGFyYW0xPWE+MiZ1cmw9aHR0cDovL3d3dy5leGFtcGxlLmNvbS8/dHlwZT0x\n'

到了这里,关于Python 标准类库-因特网数据处理之Base64数据编码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 5.3.3 因特网的路由协议(三)OSPF协议

    5.3.3 因特网的路由协议(三)OSPF协议 前面我们学习了基于距离向量算法的路由信息协议RIP(5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议),为了克服RIP协议的局限性于是就有了新的内部网关协议OSPF协议,OSPF是Open Shortest Path First的缩写,又被成为开放式最短路径

    2024年02月09日
    浏览(36)
  • 【MOOC 作业】第1章 计算机网络和因特网

    不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) ‌试比较分组交换和电路交换的主要优缺点。 电路交换: 特点:在端系统间通信期间,预留了端系统间沿路径通信需要的资源。 优点:发送方可以以恒定的速率向接收方发送数据。 缺点:创建端到端电路和预留端

    2024年02月11日
    浏览(43)
  • 【MOOC 测验】第1章 计算机网络和因特网

    1、主机或端系统通过(   )接入因特网。 A. ISP B. 调制解调器 C. 交换机 D. 路由器 P21:端系统(PC、智能手机、Web 服务器、电子邮件服务器等)经过一个接入 ISP 与因特网相连。 2、‌主机一般被划分为两类:客户和 (   ) 。 A. 端系统 B. 大型主机 C. 数据中心 D. 服务器 3、

    2024年02月11日
    浏览(37)
  • 【计算机网络 - 自顶向下方法】计算机网络和因特网

    1. 什么是Internet 1.1 因特网的具体构成 终端: 也称主机(Host)或端系统(End system),运行应用程序(智能网约汽车、智能家电)。 通信链路: 光纤,铜线,电磁波。主要指标为传输速率也称带宽(Bandwidth),可分为有线链路和无线链路。 交换设备: 转发分组(Packet),有

    2024年02月07日
    浏览(50)
  • 【网络奇遇记】我和因特网的初相遇2 —— 三种交换方式

    🌈个人主页: 聆风吟 🔥系列专栏: 网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。     网络的核心部分由大量异构型网络和连接这些网络的路由器构成,为其边缘部分提供连通性和数据交换等服务。在核心部分起特殊作用的是 路由器 ,它是一种专

    2024年02月05日
    浏览(38)
  • mininet虚拟网络中的主机与宿主Ubuntu及因特网互通实现

    环境: Win10(物理机),Vmware workstation ,Ubuntu(vm中的虚拟机),mininet 构建的虚拟网络环境说明: 在一win10的物理机中安装了vm平台,在vm中加载了一ubuntun系统,在改ubuntu系统中安装了mininet。 目标: 通过mininet 构建虚拟网络环境(使用python代码构建一个交换机,一个控制器

    2024年03月10日
    浏览(50)
  • 5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议

    5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议 一、RIP协议概念 RIP是Routing Information Protocol缩写,又称为路由信息协议,是最先得到应用的内部网关协议,RIP作为一个常在小型互联网中使用的路由信息协议,它是依据 跳数 来作为度量值进行路由选择,这里的跳数可

    2024年02月09日
    浏览(40)
  • 【网络奇遇记】我和因特网的初相遇3 —— 网络的体系结构篇

    🌈个人主页: 聆风吟 🔥系列专栏: 网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。     为了使不同体系结构的计算机网络都能互连起来,国际标准化组织(简称:ISO)于1977年成立了专门机构研究该问题。不久,它们提出了一个使全世界各种计算机

    2024年02月04日
    浏览(44)
  • 【计算机网络 01】说在前面 信息服务 因特网 ISP RFC技术文档 边缘与核心 交换方式 定义与分类 网络性能指标 计算机网络体系结构 章节小结

    说在前面 本博客专栏都是基于B站上的湖科大计算机网络课程的课程笔记,主要是由于我发现无法从课程网站获得清晰PDF作为复习资料,所以制作此笔记同时也方便其他同学复习回顾,并且有少量补充参考 https://www.jianshu.com/u/5807cd8caf1d 同学的笔记 1.1 计算机网络 信息时代作用

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包