python编码
ASCLL、GBK、UTF-8、Unicode的关系
字符的编码形式
ASCLL:是最经典的编码方式,将序列中的每个字节理解为字符,可表示数字和字母128个不同字符。
GBK(GB2312的扩展):兼容ASCLL的不定长(长度为1-2),对于基本的128个字符仍用一个字节表示,中文用两个字表示。
UTF-8:与GBK类似,兼容ASCLL的不定长编码形式,可以表示世界多有文字,对英文使用一个字节,中文三个字节。
Unicode:是一种定长编码方式(同ASCLL),不兼容ASCLL,每2个字节作为一个字符,可以映射所有文字。
由于:Unicode编码的字符串体积很大,因此Unicode文字只在内存中的内在形式,具体的存储(文件、网页、屏幕输入输出等)都要靠外在的编码(UTF-8、GBK等)。
字节码Bytes
Python3中Bytes用b’xxx’表示x可以用字符,也可以用ascii表示。二进制文件(图片)统一采用字节码读写。
字节码修改:修改bytes中的某个字节要将其转换为bytearray才可以。
字节码与字符的关系
将表示二进制的bytes进行相应的编码就可以变为字符(utf-8格式的bytes和gbk格式的bytes不相同)
文件的编码
Python3中字符是Unicode的形式存储在计算机内存中,存储在硬盘中是bytes形式存储,如果将字符写入硬盘,就必须对字符进行encode。
例如:以’w’模式写入,要求内容是str类型,’wb’模式写入,要求内容是bytes类型。
Python3
python3的默认编码为unicode,由str类型进行表示。
将str类型转化为bytes类型,使用encode()内置函数,反之decode()函数。
二进制数据使用byte类型。
例如:显示的内容只显示英文和数字,中文是乱码,就需要将内容进行encode(‘utf-8’)编码