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)

 

posted @ 2017-12-21 20:05  争-渡  阅读(148)  评论(0)    收藏  举报