Python 中 base64 编码与解码 base64 是经常使用的一种加密方式,在 Python 中有专门的库支持 。
本文主要介绍在 Python2 和 Python3 中的使用区别:
在 Python2 环境:
在 Python3 环境:
Python3 中有一些区别,因为 Python3 中字符都是 unicode 编码,而b64encode函数的参数为 byte 类型,所以必须先转码 。
以上就是本文的全部内容,如果觉得有用的话欢迎 点赞 和 转发 , 多谢 。
推荐阅读:
python3.4 编码有哪些Python3中的编码问题前python编码函数,第一个段落对字节、ASCII与Unicode与UTF-8等进行基本介绍,如果不对这几种编码犯头晕,可直接跳过 。
ASCII与Unicode与UTF-8与GBK
首先从老大哥说起 。跟很多人一样 , 大学读了这么久,久仰ASCII编码的大名 。要说这个老大哥,我们再先从字节说起 。一个字节包括八个比特位,每个比特位表示0或1,一个字节即可表示从00000000到11111111共2^8=256个数字 。一个ASCII编码使用一个字节(除去字节的最高位作为作奇偶校验位) , ASCII编码实际使用一个字节中的7个比特位来表示字符,共可表示2^7=128个字符 。比如那时写C语言的程序,就经常要背下ASCII编码中的01000001(即十进制的65)表示字符‘A’,01000001加上32之后的01100001(即十进制的97)表示字符‘a’ 。现在打开Python,调用chr和ord函数,我们可以看到Python为我们对ASCII编码进行了转换 。
第一个00000000表示空字符,因此ASCII编码实际上只包括了
字母、标点符号、特殊符号等共127个字符 。因为ASCII是在美国出生的,对于由字母组成单词进而用单词表达的英文来说也是够了 。但是中国人、日本人、
韩国人等其python编码函数他语言的人不服了 。中文是一个字一个字 , ASCII编码用上了浑身解数256个字符都不够用 。
因此后来出现了Unicode编码 。Unicode编码通常由两个字节组成,共表示256*256个字符,即所谓的UCS-2 。某些偏僻字还会用到四个字节 , 即所谓的UCS-4 。也就是说Unicode标准也还在发展 。但UCS-4出现的比较少,我们先记?。鹤钤嫉腁SCII编码使用一个字节编码,但由于语言差异字符众多,人们用上了两个字节,出现了统一的、囊括多国语言的Unicode编码 。
在Unicode中,原本ASCII中的127个字符只需在前面补一个全零的字节即可 , 比如前文谈到的字符‘a’:01100001 , 在Unicode中变成了00000000 01100001 。不久,美国人不开心了,吃上了世界民族之林的大锅饭,原本只需一个字节就能传输的英文现在变成两个字节 , 非常浪费存储空间和传输速度 。
人们再发挥聪明才智,于是出现了UTF-8编码 。因为针对的是空间浪费问题 , 因此这种UTF-8编码是可变长短的 , 从英文字母的一个字节,到中文的通常的三个字节 , 再到某些生僻字的六个字节 。解决了空间问题,UTF-8编码还有一个神奇的附加功能,那就是兼容了老大哥的ASCII编码 。一些老古董软件现在在UTF-8编码中可以继续工作 。
注意除了英文字母相同,汉字在Unicode编码和UTF-8编码中通常是不同的 。比如汉字的‘中’字在Unicode中是01001110
00101101 , 而在UTF-8编码中是11100100 10111000
10101101 。
我们祖国母亲自然也有自己的一套标准 。那就是GB2312和GBK 。当然现在挺少看到 。通常都是直接使用UTF-8 。记得我唯一一次看到GB编码的网页,是一个成人网站 。
Python3中的默认编码
Python3中默认是UTF-8,我们通过以下代码:
import sys
sys.getdefaultencoding()
可查看Python3的默认编码 。
Python3中的encode和decode
Python3中字符编码经常会使用到decode和encode函数 。特别是在抓取网页中,这两个函数用的熟练非常有好处 。我的理解,encode的作用,使我们看到的直观的字符转换成计算机内的字节形式 。decode刚好相反,把字节形式的字符转换成我们看的懂的、直观的、“人模人样”的形式 。如下图 。
\x表示后面是十六进制,\xe4\xb8\xad即是二进制的11100100 10111000
10101101 。也就是说汉字‘中’encode成字节形式,是11100100 10111000
10101101 。同理,我们拿11100100
10111000 10101101也就是\xe4\xb8\xad来decode回来,就是汉字‘中’ 。完整的应该是b'\xe4\xb8\xad',在Python3中,以字节形式表示的字符串则必须加上前缀b , 也就是写成上文的b'xxxx'形式 。
前文说的Python3的默认编码是UTF-8,所以我们可以看到 , Python处理这些字符的时候是以UTF-8来处理的 。因此从上图可以看到,就算我们通过encode('utf-8')特意把字符encode为UTF-8编码,出来的结果还是相同:b'\xe4\xb8\xad' 。
明白了这一点,同时我们知道UTF-8兼容ASCII , 我们可以猜想大学时经常背诵的‘A’对应ASCII中的65 , 在这里是不是也能正确的decode出来呢 。十进制的65转换成十六进制是41,我们尝试下:
b'\x41'.decode()
结果如下 。果然是字符‘A’
Python3中的编码转换
据说字符在计算机的内存中统一是以Unicode编码的 。只有在字符要被写进文件、存进硬盘或者从服务器发送至客户端(例如网页前端的代码)时会变成utf-8 。但其实我比较关心怎么把这些字符以Unicode的字节形式表现出来,露出它在内存中的庐山正面目的 。这里有个照妖镜:
xxxx.encode/decode('unicode-escape')
输出如下
b'\中'还是b'中,一个斜杠貌似没影响 。同时可以发现在shell窗口中,直接输'中'和输入b'中'.decode('unicode-escape')是相同的,都会打印出汉字‘中’,反而是'中'.decode('unicode-escape')会报错 。说明说明Python3不仅支持Unicode,而且一个‘\uxxxx’格式的Unicode字符可被辨识且被等价于str类型 。
如果我们知道一个Unicode字节码,怎么变成UTF-8的字节码呢 。懂了以上这些,现在我们就有思路了,先decode , 再encode 。代码如下:
xxx.decode('unicode-escape').encode()
测试如下:
可以看到最后输出的UTF-8字节与上面的相同 。尝试成功 。所以其他的编码之间的转换 , 大概也是如此 。
最后的扩展
还记得刚刚那个ord吗 。时代变迁,老大哥ASCII被人合并,但ord还是有用武之地 。试试ord('中'),输出结果是20013 。20013是什么呢 , 我们再试试hex(ord('中')),输出结果是'0x4e2d',也就是20013是我们在上文见面了无数次的x4e2d的十进制值 。这里说下hex,是用来转换成十六进制的函数 , 学过单片机的人对hex肯定不会陌生 。
最后的扩展 , 在网上看到的他人的问题 。我们写下类似于'中'的字符,Python3知道我们想表达什么 。但是让Python读取某个文件的时候出现了'中',是不是计算机就不认识它了呢?后来下文有人给出了答案 。如下:
import codecs
file = codecs.open( "a.txt", "r", "unicode-escape" )
u = file.read()
print(u)
python有多少内置函数Python内置函数有很多,为大家推荐5个神仙级的内置函数:
(1)Lambda函数
用于创建匿名函数,即没有名称的函数 。它只是一个表达式 , 函数体比def简单很多 。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了 。
Lamdba的主体是一个表达式,而不是一个代码块 。仅仅能在lambda表达式中封装有限的逻辑进去 。
利用Lamdba函数,往往可以将代码简化许多 。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词,然后将此函数应有到列表colors中的所有元素 。
我们还可以使用匿名函数lamdba来配合map函数,这样可以更加精简 。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时,reduce()是个非常有用的函数 。举个例子,当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现 。
它与函数的最大的区别就是 , reduce()里的映射函数(function)接收两个参数,而map接收一个参数 。
(4)enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标 , 一般用在for循环当中 。
它的两个参数,一个是序列、迭代器或其他支持迭代对象;另一个是下标起始位置,默认情况从0开始,也可以自定义计数器的起始编号 。
(5)Zip函数
用于将可迭代的对象作为参数 , 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
当我们使用zip()函数时,如果各个迭代器的元素个数不一致 , 则返回列表长度与最短的对象相同 。
len函数python用法python中len()的用法:
新建一个len()函数的使用py,中文编码声明注释:#coding=gbk,函数:len()作用:返回字符串、列表、字典、元组等长度 。语法:len(str) 。参数:str:要计算的字符串、列表、字典、元组等 。返回值:字符串、列表、字典、元组等元素的长度 。
实例:
1、计算字符串的长度 。
2、计算列表的元素个数 。
3、计算字典的总长度,即键值对总数 。
4、计算元组元素个数 。
在Python中 , 要知道一个字符串有多少个字符,以获得字符串的长度 , 或者一个字符串需要多少字节,可以使用len函数 。
python中怎么求ascii码7、8、9的编码度知道 提问
搜一搜
python中怎么求ascii码7、8、9的编码
社会我飞哥16888
今天 01:21 超过161用户采纳过TA的回答
关注
我们可以使用for循环和ord()函数来获取字符串的 ASCII 值 。ord()函数返回传递字符串的 Unicode 。它接受1作为字符串的长度 。for循环用于迭代序列:列表、元组、字典、集合或字符串 。因此,我们可以使用for循环来解析字符串的每个字符并将其转换为 ASCII 值 。
在下面的代码中,text 是一个保存用户输入的变量 。ascii_values 最初是一个空列表,稍后将保存字符串中每个字符的 ASCII 值 。一旦循环完成其循环,我们将向用户显示 ascii_values 的内容作为输出 。append() 函数在每次迭代后向列表 ascii_values 添加一个新项目 。
当我们运行这个程序时 , 用户会收到一个字符串提示,一旦用户提供了一个字符串 , 它就会被存储在一个变量 text 中 。在示例中,输入是字符串 hello 。打印字符串中每个字符的 ASCII 值 。
示例代码:
#python 3.x
text = input("enter a string to convert into ascii values:")
ascii_values = []
for character in text:
ascii_values.append(ord(character))
print(ascii_values)
输出:
enter a string to convert into ASCII values: hello
[104, 101, 108, 108, 111]
二、在 Python 中使用 List Comprehension 和 ord() 函数获取字符串的 ASCII
我们可以使用列表推导来实现相同的结果 。Python 中的列表推导式是一种简单而紧凑的语法,用于从字符串或其他列表创建列表 。这是一种通过对现有列表中的每个项目进行操作来创建新列表的简洁方法 。列表推导比使用 for 循环处理列表快得多 。
在下面的代码中 , 外部没有 for 或 while 循环 。但是在列表推导中,我们使用 for 循环来获取 text 的每个 character 。
示例代码:
#python 3.x
text = input("enter a string to convert into ascii values: ")
ascii_values = [ord(character) for character in text]
print(ascii_values)
输出:
enter a string to convert into ASCII values: hello
[104, 101, 108, 108, 111]
三、使用用户定义的函数 to_ascii() 在 Python 中获取字符串的 ASCII
另一种编写代码以实现相同目标的方法是使用用户定义的函数 。用户定义函数是用于在策略正文中组织代码的函数 。一旦你定义了一个函数,你就可以像内置的动作和解析器函数一样调用它 。传递给函数的变量是通过引用而不是通过值传递的 。
在下面的代码中,我们使用用户定义的函数 to_ascii 将 text 作为参数 。在函数内部,定义了块操作,并通过关键字 return 传递结果 。当从提供 text 的主模块调用函数 to_ascii 作为参数控制转移到 to_ascii 函数并执行代码块时,我们会在列表中获得给定字符串的 ASCII 值 。
示例代码:
#python 3.x
def to_ascii(text):
ascii_values = [ord(character) for character in text]
return ascii_values
text = input("Enter a string: ")
print(to_ascii(text))
输出:
Enter a string:
hello
[104, 101, 108, 108, 111]
【python编码函数 python编码规范有哪些】python编码函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于python编码规范有哪些、python编码函数的信息别忘了在本站进行查找喔 。
推荐阅读
- mongodb从3.4升级到4.0的简单介绍
- python3.7安装tkinter,Python37安装machine库问题
- 理财直播录屏,直播录屏资源
- c语言中的函数名的表示 c语言函数的命名规范
- 手机什么cpu最好,手机什么cpu最好用
- 拍摄视频助理是什么,短视频拍摄助理
- 抖音直播违规电话多少,抖音直播违规行为规定一览表
- 面试mysql表怎么设计 mysql面试常见问题
- 台式电脑主机声音怎么调,台式电脑主机声音怎么调大