什么是字符编码
计算机能执行和储存的数据均为二进制数字,因此写出的代码字符均要转换成二进制数字才能执行(字符–>转换–>数字),这个过程就是一个字符如何通过标准转换成数字,而不同的标准就是不同的编码。
字符编码的分类
ASCII码
用一个字节(byte=8bit)来代表一个字符,一共可代表256个字符,而英文只用了其中127个字符。
unicode
是一种字符集也是一种编码方式,统一用两个字节来代表一个字符,一共可代表65535个字符,而英文编码时也会使用两个字节,因此比ascii码多了一倍的空间,因此衍生出了utf-8这种编码方式,为可变长的字节,不同的字符会以一至三个字节来表示,节约空间。
unicode转换速度快,因此储存在内存中默认的编码和解码方式均为unicode
utf节省空间,但转换速度慢,利于在网络中传输文本
python的代码解释
python默认编码方式
python2默认采用ascii的编码方式。
在头文件中加入#-*-coding:utf-8-*-
来进行编解码
python3默认采用utf-8的编码方式。
具体编码方式会因为解释器的设置而改变,可使用函数sys.getdefaultencoding()
来进行查询
编码解码函数
bytes.decode()
将二进制数据流根据指定方式解码
str.endode()
将字符串类型通过编码变为二进制字符串
python3中
在python解释器中,当定义了一个新的字符串时(str类型),在内存中储存时会以unicode编码二进制字符保存,可以使用任意编码标准将str类型encode将其编码成任意byte类型字符。所以两种类型是不能混用的
。
python2中
而在2中,定义了新的字符串的时候会自动以头文件定义的编码格式编码成bytes类型,因此在2中str和bytes是一种数据类型,因此2中不指定编码格式,就会以默认acsii码编码,所以当终端采用unicode解码中文时会出现乱码的问题。