Python base64

文章详细介绍了Python中base64模块的常用函数,包括encode/decode、b64encode/b64decode、urlsafe_b64encode/urlsafe_b64decode等,以及它们在处理二进制数据、图片编码和在网络传输中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、base64可用函数集合

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',
    ]

二、函数详情

2-1 base64.encode()与base64.decode()

encode:对文件进行编码;输入和输出都是二进制文件
decode:对文件进行解码;输入和输出都是二进制文件

2-1-1 源代码

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)  # 写入新文件中

2-1-1 使用实例

对图片文件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文件内容
在这里插入图片描述

2-2 base64.b64encode()与base64.b64decode

b64encode:对二进制数据进行编码成字符串,适用于64位编码
b64decode:把字符串解码成二进制数据,适用于64位编码

2-2-1 源码

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)

2-2-2 实例

encoded = base64.b64encode(open('123.png', 'rb').read()) # 将二进制数据编码成base64字符串
print(encoded)

decode = base64.b64decode(encoded) # 将base64字符串解码成二进制数据
print(decode)
open('abc.png', 'wb').write(decode) # 写入文件

在这里插入图片描述
在这里插入图片描述

2-3 base64.b32encode()与base64.b32decode

与b64encode/b64decode 同义,b64encode就是b32encode一种扩展

2-4 base64.urlsafe_b64encode()与base64.urlsafe_b64decode

现在网络上传/下载图片,在传递过程中把图片转换为base64字符串,但是作为url参数传递时,由于url中会转义<如:‘=’ 转换为 ‘%3D’>这样就改变了base64字符串内容,urlsafe_b64encode可以避免这种情况发生
urlsafe_b64encode:二进制数据编码为字符串
urlsafe_b64encode:字符串解码为二进制数据

2-4-1 源码

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)

2-4-2 传输网络图片

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值