python3 编码

编码方式


将明文编码成密文需要按照一定的编码方式,编码方式多种多样,分别对应于不同的字符集。

ASCII

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 
ASCII码一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

其他编码

对于英语来说128个字符就已经够用了,但是对于其他语言来说却不够。因此针对不同的语言先后出现了多种编码方式,例如针对中文的GB2312和GBK编码,针对中文繁体的Big5编码等等,这些编码方式都使用多个字节表示一个字符。

Unicode

随着越来越多的编码方式的出现,急需一种能够包含全世界所有符号的编码系统来消灭乱码,这种编码系统就叫做Unicode。Unicode只是一套编码系统,包含所有字符集,却并不规定编码后的二进制代码如何存储。

UTF-32使用4个字节存储每一个字符,但是对于英文字符来说,使用ASCII编码只需1个字节即可存储,这极大的浪费了存储空间。 
因此出现了一种变长的编码方式UTF-8,UTF-8是使用得最广泛的Unicode编码实现方式,使用1-4个字节表示一个字符,根据不同的字符变化长度。比如对于英文字符,1个字节就够了,但是对于中文,可能需要2-4个字节才能存储。

Base64

Base64是网络上最常见的用于传输8Bit字节代码的编码方式,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,可用作简单的加密方式。

Python 3编码


以前用Python 2,每次使用中文就会碰到各种编码问题,但是Python 3使得字符串编码变得非常简单。

我们可以通过以下代码查看Python 3的字符串默认编码:

import sys
sys.getdefaultencoding()

Python 3的默认编码方式是UTF-8。

使用Python解释器进行如下编码解码操作,在bytes和str之间转换:

>>> '中'.encode()
b'xe4xb8xad'
>>> b'xe4xb8xad'.decode('utf-8')
'中'

我们在使用Python以二进制的形式写入文件时,需要先将字符串编码成字节串,然后再写入文件。以二进制的形式读取文件时也是如此,需要将读取的字节串解码成字符串。

原文地址:https://www.cnblogs.com/xp1005/p/6385647.html