Python基础6(编码与解码)
数值运算
= : 赋值
== : 比较值是否相等
is :比较 比较的是内存地址
1 li1 = [1, 2, 3] 2 li2 = li1 3 li3 = li2 4 print(id(li1), id(li2))
小数据池:在此范围内内存地址相同的意思
数字的范围: -5 ---- 256 之间
字符串:1、不能有特殊字符
2、s*20 是同一个地址,s*21以后都是两个地址
1 a = -5 2 b = -5 3 print(id(a), id(b)) 4 c = 256 5 d = 256 6 print(id(c), id(d)) 7 e = 257 8 d = 257 9 print(id(e), id(d)) 10 s1= 'a'*20 11 s2= 'a'*20 12 print(s1 is s2) 13 s1= 'a'*21 14 s2= 'a'*21 15 print(s1 is s2)
PS:只有数值与字符串有小数据池概念
编码问题
ASCII
A :00000010 8位 一字节
Unicode
A:00000010 00000010 00000010 00000010 32位 四个字节
中:00000010 00000010 00000010 00011010 32位 四个字节
utf-8
A:00110011 8位 一个字节
中:00110011 00110011 00110011 24位 三个字节
gbk
A:00110011 8位 一个字节
中:00110011 00110011 00110011 16位 两个字节
各编码之间的二进制,是不能互相识别的,会产生乱码。
文件的存储,传输,不能用Unicode(只能是utf-8 utf-16 gbk gb2312 ASCII等)
Python3:
str在内存中是用Unicode编码。

bytes 类型
对于英文:
str :表现形式: s = ‘alex’
编码方式:0101110101 Unicode
bytes:表现形式: s = b‘alex’
编码方式: 0101010101 utf-8 gbk
对于中文:
str:表现形式:s = ‘中国’
编码方式:0101010101 Unicode
bytes:表现形式:s = b‘x\e91\e01\e21\e31\e32'
编码方式: 0001000010 utf-8 gbk
1 s1 = 'alex' 2 # uncoud 编码,如何将str---->bytes, () 3 # s11 = s1.encode('utf-8') 4 # s11 = s1.encode('gbk') 5 # print(s11) 6 s2 = "中国" 7 s22 = s2.encode('utf-8') 8 print(s22)
解码:
1 s = 'erg' 2 b = s.encode('utf-8') 3 print(b) 4 5 # byte ---> str decode 解码 6 s1 = b.decode('utf-8') 7 print(s1)

浙公网安备 33010602011771号