赞
踩
base64方法是成套的,即encode编码/decode解码
__all__ = [ 'encode', # 编码后为字符型 'decode', 'encodebytes', # 编码后为字节型 'decodebytes', 'b64encode', # 64位编码后为字符型 'b64decode', 'b32encode', # 32位编码后为字符型 'b32decode', 'b16encode', # 16位编码后为字符型 'b16decode', 'b85encode', 'b85decode', 'a85encode', 'a85decode', 'standard_b64encode', # 标准的64位编码 'standard_b64decode', 'urlsafe_b64encode', # 当编码后,用于url参数时,可用此方法,因为url中有特须字符处理机制< '=' 为 '%3D' > 'urlsafe_b64decode', ]
encode:对文件进行编码;输入和输出都是二进制文件
decode:对文件进行解码;输入和输出都是二进制文件
def encode(input, output): # input, output都是二进制文件 """Encode a file; input and output are binary files.""" while True: s = input.read(MAXBINSIZE) # input必须是open(xxx,'rb')对象 if not s: break while len(s) < MAXBINSIZE: ns = input.read(MAXBINSIZE-len(s)) if not ns: break s += ns line = binascii.b2a_base64(s) output.write(line) # output必须是open(xxx,'wb')对象 def decode(input, output): """Decode a file; input and output are binary files.""" while True: line = input.readline() # 按行读取文件内容 if not line: break s = binascii.a2b_base64(line) output.write(s) # 写入新文件中
对图片文件123.png编码,并输出到456.txt文件中
import base64
base64.encode(open('123.png', 'rb'), open('456.txt', 'wb')) # 编码
base64.decode(open('456.txt', 'rb'), open('789.png', 'wb')) # 解码
# encode与decode两个参数只接受二进制,所以open必须指定为'b'表示字节
生成456.txt文件内容
b64encode:对二进制数据进行编码成字符串,适用于64位编码
b64decode:把字符串解码成二进制数据,适用于64位编码
def b64encode(s, altchars=None): encoded = binascii.b2a_base64(s, newline=False) if altchars is not None: assert len(altchars) == 2, repr(altchars) return encoded.translate(bytes.maketrans(b'+/', altchars)) return encoded def b64decode(s, altchars=None, validate=False): s = _bytes_from_decode_data(s) if altchars is not None: altchars = _bytes_from_decode_data(altchars) assert len(altchars) == 2, repr(altchars) s = s.translate(bytes.maketrans(altchars, b'+/')) if validate and not re.fullmatch(b'[A-Za-z0-9+/]*={0,2}', s): raise binascii.Error('Non-base64 digit found') return binascii.a2b_base64(s)
encoded = base64.b64encode(open('123.png', 'rb').read()) # 将二进制数据编码成base64字符串
print(encoded)
decode = base64.b64decode(encoded) # 将base64字符串解码成二进制数据
print(decode)
open('abc.png', 'wb').write(decode) # 写入文件
与b64encode/b64decode 同义,b64encode就是b32encode一种扩展
现在网络上传/下载图片,在传递过程中把图片转换为base64字符串,但是作为url参数传递时,由于url中会转义<如:‘=’ 转换为 ‘%3D’>这样就改变了base64字符串内容,urlsafe_b64encode可以避免这种情况发生
urlsafe_b64encode:二进制数据编码为字符串
urlsafe_b64encode:字符串解码为二进制数据
def urlsafe_b64encode(s):
return b64encode(s).translate(_urlsafe_encode_translation)
def urlsafe_b64decode(s):
s = _bytes_from_decode_data(s)
s = s.translate(_urlsafe_decode_translation)
return b64decode(s)
import requests
res = request.get('https://www.baidu.com' + file_path)
encoded = base64.urlsafe_b64encode(res.content)
## 假如django后台
def str_json()
res = request.get('https://www.baidu.com' + file_path)
encoded = base64.urlsafe_b64encode(res.content)
return JsonResponse{'image_str': encoded }
# 显示图片用urlsafe_b64decode解码
decoded = base64.urlsafe_b64decode(encoded)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。