一.is 比较的是内存地址
== 比较的是两边的值
二.编码扩展:
1字节(bytes) = 8 位(bit)
1024byte = 1kb
1024kb = 1MB
1024MB = 1GB
1024GB = 1TB
ascii: 只能用于英文,8位 一个字节 首位都是0 最初只设计了7位,发明者预留了一位,以便后期扩展,所以最后是8位。
unicode: 万国码,最早发明的时候16位,2个字节。
后来进化:32位 四个字节
utf-8:最少用8位表示一个字节
英文:8位 一个字节
欧洲文字:16位 两个字节
中文:24位 三个字节
gbk 国标,每个国家都有自己的gbk 英文: 8位 一个字节
中文:16位 两个字节
1, 各个编码之间的二进制是不能互相识别,会产生乱码。
2, 文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gdk gb2312 ascii 等)因为存储空间太大,浪费,占用资源。涉及到转化到其他的编码。
Py3:在py3中str 的编码方式是用unicode。
bytes类型:unicode转换成bytes类型在进行存储和传输。bytes和str类型基本一样,只有两个区别,1.编码方式,2.对于中文表现形式
对于英文:
str: 表现形式:s = ‘ales’ 例:a = ‘alex’
编码方式:010101010 unicode a1=b’alex’
Bytes: 表现形式:s = b’alex’ print(a,type(a))
编码方式:000101010 utf-8 gdk等 print(a1,type(a1))
对于中文:
str: 表现形式:s = ‘中国’
编码方式:010101010 unicode
Bytes: 表现形式:s=b’x\e91\e91\e01\e21\e31\e32’ 三个字节表示一个中文
编码方式:000101010 utf-8 gdk等
encode 编码:表现形式将str转换成 bytes类型,实际内部是将unicode转化为 utf-8或gbk编码 str--àbytes
例:sl = ‘alex’
sl1 = s1.encode(‘utf-8’) 转换成utf-8编码 (bytes类型),gbk也一样
print(sl1) 结果:b’alex’
decode 解码:bytes----àstr 及 非unicode(utf-8,gbk等)-àunicode
utf-8和gbk之间的转换:1.如果是字母,数字,特殊字符可以直接转换:
例:s = ‘alex’
s1 = s.encode(‘utf-8’)
s2 = s1.decode(‘gbk’)
print(s2)
2.如果是中文,需要先转换成unicode在转换成utf-8或gbk
例:
例:s = ‘中国’
s1 = s.encode(‘gbk’)
s2 = s1.decode(‘gdk’).encode(‘utf-8)
print(s2.decode(‘utf-8’))