python中base64编码
1. base64编码简介
用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。
Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。Base64是一种用64个字符来表示任意二进制数据的方法,原理很简单,首先,准备一个包含64个字符的数组['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
,然后,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit,这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。
每组6位->6位二进制取值范围为:000000-111111(0-63)正好可以取到64个字符
所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示。如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00
字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。
2. python中使用base64
python中直接使用内置包base64
即可,base64.b64encode
base64.b64decode
分别是编码和解码
import base64
if __name__ == "__main__":bytes_str = b"i love beijing"# 编码# b'aSBsb3ZlIGJlaWppbmc='base64_string = base64.b64encode(bytes_str)print(base64_string)# 解码# b'i love beijing'source_str = base64.b64decode(base64_string)print(source_str)
由于标准的Base64编码后可能出现字符+
和/
,在URL中就不能直接作为参数,所以又有一种url safe
的base64编码,其实就是把字符+
和/
分别变成-
和_
bytes_str = b"i love tiananmen"
# 编码
base64_string = base64.urlsafe_b64encode(bytes_str)
print(base64_string)
# 解码
source_str = base64.urlsafe_b64decode(base64_string)
print(source_str)
注意:无论是哪种编码方式,输入到base64中的参数都是字节的形式,因此上方中参数byte_str
前有个b
3. 应用
将图片(视频)编码成字符串
如下代码,将一张图片编码成字符串,后面我们可以将图片直接以字符串的形式保存到文件中,方便读取,因为有些情况下存取字符串会比直接保存图片方便,比如先把图片存放到数据库中
if __name__ == "__main__":import requestsfrom PIL import Imagefrom io import BytesIOimport base64response = requests.get('https://ts1.cn.mm.bing.net/th/id/R-C.fd4056c8c00979ab8561f8db8219c2ae?rik=JPk67EIYaKIS3A&riu=http%3a%2f%2fimg.mm4000.com%2ffile%2fa%2fa2%2f869bd2bd6a.jpg&ehk=2z%2bPuRHJOYtkm9ICs8fPs0EJbE96jJX2E8QyrVP5kyQ%3d&risl=&pid=ImgRaw&r=0')if response.status_code != 200:raise ValueError("request Error!")# 将请求结果存入io中, 使用PIL以io的方式打开图片img = BytesIO(response.content)pict = Image.open(img)# 改变图像大小,也可是其他操作pict = pict.resize((100, 100), Image.ANTIALIAS)# 将图片存入io中, PIL格式的图片变成byte格式img_buff = BytesIO()pict.save(img_buff, "jpeg")# 使用base64把byte对象编码成字符串img_str = base64.urlsafe_b64encode(img_buff.getvalue())print("image string:", img_str.decode("utf-8"))img.close()# 将字符串解码成图片bytes_image = base64.urlsafe_b64decode(img_str)image_buff = BytesIO(bytes_image)image = Image.open(image_buff)image.show()
结果如下:
python中base64编码相关推荐
- 编码以及Python中的编码
编码 不管是哪种语言,在学习的时候,只要涉及到中文,多多少少都会遇到一些编码问题.然而,说实话,作为一个英语水平没有那么专业的中国人,中文是必不可少的.所以,了解编码以及解码就变得非常重要.下面是从各 ...
- python使用base64编码解码数据
python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...
- python安全编码问题_浅谈Python中的编码问题
对于Python的初学者来说,编码问题相当令人头疼.本文就根据我在学习过程中遇到的问题简单谈一下Python中的编码.首先简单介绍一下几种常见的编码. 一.几种常见的字符编码 ASCII码 ASCII ...
- 浅谈Python中的编码规则
注:本人用Python3.4作为学习版本,以下学习心得只适用于Python3.4. 之前拜读了金角大王Alex关于编码的解答,收获颇多.特此致谢,以下仅谈一谈作为一个初学者,对编码的理解. 我所了解的 ...
- python编码解码单词_在使用w2v时python中的编码问题
我正在使用word2vec模型在python中编写我的第一个应用程序. 这里是我的简单的代码在使用w2v时python中的编码问题 import gensim, logging import sys ...
- Javascript中Base64编码解码的使用实例
Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...
- python中的编码问题
Python 中的编码问题 在python中遇到编码问题主要来自于ASCII和gbk两个方面.win中python为unicode 编码而控制台一般为gbk编码 ASCII 对于ASCII来说,是由于 ...
- python采用的编码是什么意思_深入浅出地,彻彻底底地理解Python中的编码
python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error.本文的目的是简明扼要地说明python的编码机制,并给出一些建议 ...
- Vue中base64编码和解码
推荐一个不错的学习资料库 Vue中base64编码和解码 1.在项目更目录下执行命令,安装 npm install --save js-base64 2.在使用的项目引入 let Base64 = r ...
最新文章
- Java实现无向图的邻接列表表示,深度遍历及广度遍历
- android-sdk-windows下载版
- hash表建立 很久没写数据结构了
- 【PHP】 数组分页函数、根据字段排序并分页
- Python subprocess
- JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取
- Hibernate 查询数据
- 程序员的算法课(20)-常用的图算法:最小生成树(MST)
- Waymo真·无人车上路了!没司机的出租车推出在即 | 多图实拍
- 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
- 对称加密、非对称加密、数字签名、数字证书、签名加密
- 基于马尔萨斯的人口模型的一个Logistic模型(MATLAB)
- 前端之品优购项目(一)
- Windows开启ssh服务配合 IOS 快捷指令完成骚操作
- html 给文字加图片背景,如何给文字添加背景图?给文字填充图片背景色的操作方法...
- 电脑需要装杀毒软件吗?两个理由看完你做决定
- 像西方知识分子那样登场
- 计算机准备打印却没动静,打印机显示正在打印但是没反应怎么办?
- 这些程序员常用快捷键你了解吗?让你的双手在键盘上起舞
- 线程池监控和动态配置