关于Python 中 encode 和 decode 的区别
在初学python的过程中,涉及python的编码方式,谈一谈自己的理解。
首先就是计算机存储数据的基本知识,现代计算机极其复杂,但是从简单的方面来看,其就是一个巨大的开关阵列,使用“1”和“0”表示开和关,今天我们用“字节”(byte)表示一个8位(0和1)序列,有了字节以后,可以通过类似于编码的方式将我们所需要的文本信息转化为开关信息来进行存储,当我们需要显示该信息的时候使用解码的方式将其显示出来。
最为常见的标准就是美国信息交换标准代码(ASCⅡ),这个标准将数字和字母互相对应,比如90表示Z,如果用位数表示就是1011010,计算机中的ASCⅡ表会做出相应的转换工作。但是ASCⅡ有一个问题,就是它只能对英语和若干类似的语言进行编码,世界上的语言何止千万种,使用的字符数量也远远超过256个,这是一个急需要解决的问题。
为了解决这个问题,Unicode就被发明了出来,这是一种人类语言的“通用编码”,即为(universal encoding),它可以存储个字符,这足以装的下所有的语言。所以存储字符的问题就解决了,但是我们的文本用不了那么多的字符,大部分常用字符依然使用8位编码,这一约定在Python里面叫UTF-8(Unicode Transformation Format 8 Bits),这是当前的标准。
但在实际学习的过程中,我参考了这篇高浏览量的文章: https://blog.csdn.net/qq_40134903/article/details/80710882
,发现和所写的程序有着不一样的结果,或者说原博表述的有些问题。
所谓encode,是编码的意思,很明显是字符串→字节串的表达,也就是说成功的使用这个函数的到的结果应当时一个人类看不懂的字节串,至于这个字节串是什么类型的,取决于函数括号内的内容,即:
bytes = str.encode('UTF-8') #UTF-8可以替换为如gb2312之类的其他编码方式
而decode则恰恰相反,它是一种从字节串到字符串的转换,这里可以将字节串比作一把锁,而decode就是一个开锁匠,他将会使用各种编码方式来进行开锁,如果字节串是通过UTF8编码的,那么只有对应的UTF-8这把钥匙能开,否则会报错。
str = bytes.decode('UTF-8') #这里的str来自于上面的bytes,它们的编码解码方式相同,所以程序可以正常的运行
考虑这种情况:
str = bytes.decode('gb2312') #程序报错
所以这里就很明显了,每次要将字节串转化为字符串,就是“解码字符串”,将字符串转化为字节串,就是“编码字符串”,可以试试下面的程序:
str = "中国"
bytes = str.encode('UTF-8')
str_changed = bytes.decode('UTF-8')
#str_changed = bytes.decode('gb2312') 此句报错 SyntaxError: invalid syntax
print(str_changed)
如有疑问,请邮件联系: [email protected]