Python 标准类库-因特网数据处理之Base64数据编码
Posted 授客的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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文件。input和output必须是文件类对象。input将被读取,直到
input.readline()
”返回一个空字节对象。 -
base64.decodebytes(s)
解码字节类型对象s,s必须包含一行或多行base64编码的数据,并返回解码后的字节。3.1版新增。
-
base64.decodestring(s)
decodebytes()
的别名,3.1版本中废弃。 -
base64.encode(input, output)
对二进制input文件的内容进行编码,并将生成的base64编码数据写入output文件。input和output必须是文件类对象。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中废弃。
示例
#!/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\'
作者:授客
微信/QQ:1033553122
全国软件测试QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
微信打赏
支付宝打赏 全国软件测试交流QQ群
ruby 类库组成
一. 核心类库:
二.标准类库:
文本
base64.rb 处理Base64编码的模块
csv.rb CSV(Comma Separated Values)库 ruby 1.8 特性
digest.so 消息摘要库 请参考[ruby-src:ext/digest/digest.txt.ja]
digest/md5.so
digest/rmd160.so
digest/sha1.so
digest/sha2.so
erb.rb 嵌入Ruby(ERB) ruby 1.8 特性
iconv.so 字符串编码转换库 [ruby-src:ext/iconv/iconv.c]ruby 1.7 特性
mailread.rb 从mail中获取信息
shellwords.rb
stringio.so 将字符串伪装成IO ruby 1.7 特性
strscan.so 高速Scanner ruby 1.7 特性
yaml.rb YAML ruby 1.8 特性
zlib.so 字符串压缩·扩展 ruby 1.8 特性
文件
ftools.rb 文件操作utility(旧)
fileutils.rb 文件操作utility (ftools.rb 的升级版) ruby 1.7 特性
find.rb 文件搜索模块
io/nonblock.rb IO 类的扩展(添加与nonblock模式相关的方法)
io/wait.so IO 类的扩展(添加负责等待IO输入的方法)
pathname.rb 路径名类 ruby 1.8 特性
tempfile.rb 生成临时文件
tmpdir.rb 返回临时目录 ruby 1.8 特性
un.rb 类似Unix命令的文件操作utility ruby 1.8 特性
网络
cgi/session.rb CGI会话管理
cgi/session/pstore.rb
cgi.rb 辅助生成CGI
drb.rb 分布式 Ruby (dRuby) ruby 1.8 特性
gserver.rb Ruby Generic Server ruby 1.8 特性
ipaddr.rb IP地址类(IPAddr) ruby 1.8 特性
net/ftp.rb
net/ftptls.rb
net/http.rb
net/https.rb
net/imap.rb
net/pop.rb
net/smtp.rb
net/telnet.rb
net/telnets.rb
openssl.rb Ruby/OpenSSL ruby 1.8 特性
open-uri.rb open() 的 URI支持扩展 ruby 1.8 特性
ping.rb 验证数据包是否到达主机
resolv-replace.rb 在处理Socket相关类名时使用resolv.rb
resolv.rb Ruby版Resolver
socket.so socket扩展库
webrick.rb WEB server toolkit
xmlrpc/base64.rb XML-RPC (remote procedure calls over HTTP using XML) for Ruby ruby 1.8 特性
xmlrpc/client.rb ruby 1.8 特性
xmlrpc/config.rb ruby 1.8 特性
xmlrpc/create.rb ruby 1.8 特性
xmlrpc/datetime.rb ruby 1.8 特性
xmlrpc/httpserver.rb ruby 1.8 特性
xmlrpc/marshal.rb ruby 1.8 特性
xmlrpc/parser.rb ruby 1.8 特性
xmlrpc/server.rb ruby 1.8 特性
xmlrpc/utils.rb ruby 1.8 特性
输入输出
open3.rb
readbytes.rb
scanf.rb ruby 1.8 特性
日语
jcode.rb 使String类支持日语
kconv.rb 汉字编码转换
nkf.so 日语字符代码编码转换
数学
bigdecimal.so 可变长度浮点数运算 ruby 1.8 特性
bigdecimal/jacobian.rb
bigdecimal/ludcmp.rb
bigdecimal/newton.rb
bigdecimal/nlsolve.rb
bigdecimal/utils.rb
complex.rb 复数类
mathn.rb
matrix.rb 矩阵类
rational.rb
set.rb 有限集 ruby 1.7 特性
数据库
dbm.so 可将ndbm用作哈希表的库
gdbm.so 将gdbm (GNU dbm)用作哈希表的库
pstore.rb 对象永久化
sdbm.so
画面控制/CUI
curses.so 终端操作库 curses 的接口
expect.rb 在脚本中控制交互程序
fcntl.so 该模块中囊括了fcntl(2)中用到的常数
irb.rb Interactive Ruby (Ruby 的交互界面)
pty.so 处理伪终端(Pseudo tTY)的模块
readline.so GNU Readline 接口
shell.rb 请参考[ruby-src:doc/shell.rd.ja]
GUI
multi-tk.rb 支持多个Tcl解释器的Ruby/Tk ruby 1.8 特性
tk.rb Ruby/Tk <URL:http://ns103.net/~arai/ruby/rubytk.html.gz>
日期·时间
date.rb 日期类
parsedate.rb 日期格式的解析
time.rb 字符串和Time对象的变换
多线程·同步
monitor.rb
mutex_m.rb
sync.rb
thread.rb 与线程相关的utility
thwait.rb
Unix
etc.so 操作/etc/passwd等的库
syslog.so UNIX syslog 接口
MS Windows
Win32API.so 调用Win32 API的类 (win32 专用) 以后将用 dl/win32.rb 来取代它
win32ole.so [ruby-src:ext/win32ole/doc/win32ole.rd]ruby 1.7 特性
win32/registry.rb ruby 1.7 特性
正则表达式
eregex.rb 可使用`|‘, `&‘操作符将2个正则表达式连接起来
GC
finalize.rb
weakref.rb 生成可被GC回收的"弱"reference
Design Pattern
delegate.rb 支持委托的类
forwardable.rb 向类中定义方法委托的功能(请参考[ruby-src:doc/forwardable.rd.ja])
observer.rb Ruby中的Observer Pattern
singleton.rb Ruby中的Singleton Pattern
开发工具
benchmark.rb ruby 1.7 特性
debug.rb Ruby 调试器
mkmf.rb 制作扩展库的工具
profile.rb PROFILER
profiler.rb ruby 1.7 特性
rbconfig.rb Ruby 解释器的设置信息
rubyunit.rb [RAA:RubyUnit]兼容库 ruby 1.8 特性
test/unit.rb unit测试 ruby 1.8 特性
tracer.rb Ruby 的tracer
命令行
getoptlong.rb 命令行选项的解析
getopts.rb 命令行选项的解析
parsearg.rb 命令行选项的解析(getopts.rb)
optparse.rb 命令行选项的解析 ruby 1.7 特性
其他
English.rb 给特殊变量 $! 等添加英文别名($ERROR_INFO 等)
dl.so [ruby-src:ext/dl/doc/dl.txt]ruby 1.7 特性
dl/import.rb 请参考dl.so 。ruby 1.7 特性
dl/struct.rb 请参考dl.so 。ruby 1.7 特性
dl/types.rb 请参考dl.so 。ruby 1.7 特性
dl/win32.rb 用来代替Win32API。ruby 1.7 特性
e2mmap.rb 异常类和消息的映象
enumerator.so
importenv.rb 以操作全局变量的方式来处理环境变量
ostruct.rb Python 式的“attr on write”Struct
pp.rb Pretty-printer ruby 1.7 特性
prettyprint.rb PrettyPrint ruby 1.7 特性
racc/parser.rb Racc 运行时库
racc/cparse.so
rexml/rexml.rb XML parser ruby 1.8 特性
timeout.rb 处理超时的方法 timeout
tsort.rb 拓扑排序和强连接成分 ruby 1.7 特性
uri.rb URI 库
uri/common.rb
uri/ftp.rb
uri/generic.rb
uri/http.rb
uri/https.rb
uri/ldap.rb
uri/mailto.rb
三. 第三方类库
rubygem管理
以上是关于Python 标准类库-因特网数据处理之Base64数据编码的主要内容,如果未能解决你的问题,请参考以下文章
SnowNLP:?中文分词?词性标准?提取文本摘要,?提取文本关键词,?转换成拼音?繁体转简体的 处理中文文本的Python3 类库