编码

一、各种编码

1.1 各种编码的字节占用个数

ascii : 一个字符用1个字节表示
A: 0000 0010 8位,1个字节
unicode :中文、英文都是32位,4个字节
A: 00000000 00000001 00000010 00000100 32位,四个字节
中: 00000000 00000001 00000010 00000110 32位,四个字节
utf-8: 1个英文 8位,1个字节
欧洲 16位,2个字节表示一个字符
亚洲 24位,3个字节表示一个字符
A:0010 0000 1个字节,8位
中:0001 0000 1000 0000 0000 0000,,3个字节,24位
gbk:
A: 0000 0010 8位,1个字节
中:0000 0010 0000 0110 ,2个字节,16位
1、各个编码直接的二进制是不能互相识别,会产生乱码
2、文件的存储及传输不用unicode,因为unicode太占空间,所以只能用utf-8、gbk、gb2312、ascii码等
在py3中:str在内存中是用unicode存储的,即用unicode的编码方式
bytes类型:与str编码方式的区别是不用unicode编码,是用utf-8、gbk、gb2312、ascii等编码方式
对应英文:
str: 表现形式: s = "peng"
内部存储:010000 00000000 00000000 00000000 unicode
bytes:表现形式:s = b"peng"
编码方式:00001010 可能是utf-8或者gbk等
对于中文:
str: 表现形式: s = "peng"
内部存储:010000 00000000 00000000 00000000 unicode
bytes:表现形式:s = b'x\e91\e91\e01\e21\e32' 编码方式:00001010 可能是utf-8或者gbk等

1.2 编码类型举例
str与bytes数据类型
1 1 = "peng"
2 s2 = b"peng"
3 
4 print(s1,type(s1))
5 print(s2,type(s2))
6 结果:
7 peng <class 'str'>
8 b'peng' <class 'bytes'>
View Code
1 s1 = "广东"
2 print(s1,type(s1))
3 s2 = b"广东"
4 print(s2,type(s2))
5 结果:
6  File "E:/Python Project/05/Day5/编码.py", line 42
7     s2 = b"广东"
8         ^
9 SyntaxError: bytes can only contain ASCII literal characters.
View Code
encode 编码,将str转为bytes,内部其实就是unicode转为gbk或者utf-8等类型
1 s1 = "peng"
2 s2 = s1.encode("utf-8")#把str类型数据转为bytes类型,并且为utf-8类型
3 print(s2)
4 s2 = s1.encode("gbk")#把str类型数据转为bytes类型,并且为gbk类型
5 print(s2)
6 结果:
7 b'peng'
8 b'peng'
View Code

encode编码,将中文转为bytes类型

1 s3 = "广东"
2 s4 = s3.encode("utf-8") #每一个中文用3个字节
3 print(s4)
4 s5 = s3.encode("gbk") #每一个中文用2个字节
5 print(s5)
View Code
结果:
1 b'\xe5\xb9\xbf\xe4\xb8\x9c'
2 b'\xb9\xe3\xb6\xab'
View Code

 1.2 默认编码

Windows默认是GBK编码模式,py开发软件里面默认是utf-8模式













posted @ 2019-03-24 15:26  xiaofeiAI  阅读(152)  评论(0编辑  收藏  举报