python中的编码及转换模块
二进制和ASCII码互转的binascii模块
binascii模块包含很多二进制和各种ASCII码之间转换的方法。通常情况不会直接使用这些函数(每种编码方式都有各自独立的模块),而是使用像uu,base64,或binhex这样的封装模块。
a2b_函数接受只含有ASCII码的Unicode字符串(参数中用string表示)。b2a_函数只接受字节类对象(参数中用data表示)
binascii.a2b_uu(string)
将单行uu编码数据转换成二进制数据并返回。uu 编码每行的数据通常包含45 个(二进制)字节,最后一行除外。每行数据后面可能跟有空格。
binascii.b2a_uu(data, *, backtick=False)
将二进制数据转换为ASCII编码字符。 data的长度最多为45。如果 backtick 为ture,则零由"`"表示而不是空格。
binascii.a2b_base64(string):将base64数据转换成二进制。一次可以传递多行数据。
binascii.b2a_base64(data, *, newline=True):将二进制数据转换为一行用base64编码的ASCII字符串。如newline为true,则返回值包括换行符。
binascii.a2b_hqx(string)
将binhex4格式的 ASCII 数据不进行 RLE 解压缩直接转换为二进制数据。该字符串应包含完整数量的二进制字节,或者(在binhex4 数据最后部分)剩余位为零。
binascii.b2a_hqx(data):执行hexbin4类型二进制到 ASCII 码的转换并返回结果字符串。输入数据应经过 RLE 编码,且数据长度可被3整除(除了最后一个片段)。
binascii.b2a_hex(data)和binascii.hexlify(data)
返回二进制数据data的十六进制表示形式。每个字节都被转换为相应的2位十六进制表示形式。因此返回的字节对象的长度是data的两倍。
使用:bytes.hex() 方法也可以方便地实现相似的功能(但仅返回文本字符串)。
binascii.a2b_hex(hexstr)和binascii.unhexlify(hexstr)
返回由十六进制字符串hexstr表示的二进制数据。功能与b2a_hex()相反。 hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则会引发 Error 异常。
使用:bytes.fromhex() 类方法也实现相似的功能(仅接受文本字符串参数,不限制其中的空白字符)。
模块的异常:
binascii.Error:通常是因为编程错误引发的异常。
binascii.Incomplete:数据不完整引发的异常。
base64模块:
base64.b64encode(bytes, altchars=None):对字节对象进行Base64编码
可选altchars必须是一个长2字节的bytes对象,它指定了用于替换 + 和 / 的字符,防止URL与文件系统中出现错误
base64.b64decode(bytes, altchars=None, validate=False):解码Base64编码。
如果validate值为False(默认值),则在填充检查前,将丢弃既不在标准base-64字母表也不在备用字母表(altchars值)中的字符。如果validate为True,这些字符将导致binascii.Error。
base64.standard_b64encode(bytes):对bytes进行Base64编码
base64.standard_b64decode(bytes):解码Base64编码
base64.urlsafe_b64encode(bytes):使用-以及_代替+和/进行Base64编码,防止URL与文件系统中出现错误,返回结果中可能包含 =
base64.urlsafe_b64decode(bytes):使用-以及_代替+和/解码Base64编码
base64.encode(input, output):使用Base64编码输入文件的内容,并将结果写入输出文件。输入和输出必须是文件对象。
base64.encodebytes(bytes):对bytes进行Base64编码
base64.decode(input, output):使用Base64编码解码输入文件的内容,并将结果写入输出文件。输入和输出必须是文件对象。
base64.decodebytes(bytes):解码Base64编码
base64.b32encode(bytes):用Base32编码
base64.b32decode(bytes, casefold=False, map01=None):解码Base32编码,可选casefold指定是否接受小写字母。
map01为I/L时,bytes中可以含有1并且1会被视为字母I/L计算,并且此时bytes中可以含有0并且0会被视为字母O计算,为了安全考虑,默认值被设为 None,即0和1不允许在bytes中出现。
base64.b16encode(s):用Base16编码
base64.b16decode(s, casefold=False):解码Base16编码,casefold指定是否接受小写字母
binhex模块:
以binhe4格式对文件进行编码和解码,该格式允许Macintosh文件以ASCII格式表示。
binhex.binhex(input, output)
将带有文件名输入的二进制文件转换为binhex文件输出 。输出参数可以是文件对象或类文件对象(拥有write()和close()方法的任何对象)。
binhex.hexbin(input, output)
解码binhex文件输入。 输入可以是支持read() 和 close() 方法的文件对象或类文件对象。
uu模块:
以uuencode格式对文件进行编码和解码。为了向后兼容,in_file和out_file可以接受包含路径名的字符串,并自动打开相应的文件进行读写
uu.encode(in_file, out_file, name=None, mode=None, *, backtick=False)
将in_file文件转换为uuencoded编码并输出到文件out_file。out_file文件将具有指定name和mode的标头作为解码文件被识别。如果backtick为真则用‘`‘表示零而不是空格。
uu.decode(in_file, out_file=None, mode=None, quiet=False)
解码uuencoded文件in_file并将结果输出到文件out_file。out_file和mode的默认值取自uuencode标头。如果文件已存在,uu.Error则引发
如果in_file是由不正确的uuencoder生成的,并且Python可以从该错误中恢复,quiet值设置为True则会发出警告,否则不发出警告。