python编码
2018-12-13 本文已影响0人
xiaoshengMar
- ascii
- 只有英文
- 一个字符占8位,是1个字节
- unicode
- 英文一个字符占32位,是4个字节
- 中文一个字符占32位,是4个字节
- utf-8
- 英文中一个字符占8位,是1个字节
- 中文中一个字符占24位,是3个字节
- gbk
- 英文中一个字符占8位,是1个字节
- 中文中一个字符占16位,是2个字节
注意:
-
各个编码之间的二进制是不能互相识别的,会产生乱码
-
文件的储存和传输不能是Unicode,只能是utf-8或者utf-16或者gbk或者gb312等(因为Unicode所占的空间太大了)
python3中:
-
str在内存中是用Unicode编码的。
-
bytes类型和str类型的区别是编码方式不同,bytes不是用Unicode编码的,是用utf-8或者gbk或者ASCII等。
-
对于英文:
- str:
表现形式:s = 'alex'
编码方式:Unicode- bytes:
表现形式:s = b'alex'
编码方式:可能是utf-8或者gbk或者其他,但不会是Unicode
-
对于中文:
- str:
表现形式:s = '小生'
编码方式:Unicode- bytes:
表现形式:s = b'x\e91\e23'
编码方式:可能是utf-8或者gbk或者其他,但不会是Unicode
-
讲str转换成bytes
s1 = 'xiaosheng'
new_s1 = s1.encode('utf-8')
print(new_s1) # b'xiaosheng'
s2 = '小生'
new_s2 = s2.encode('utf-8')
print(new_s2) # b'\xe5\xb0\x8f\xe7\x94\x9f'
s3 = '小生'
new_s3 = s3.encode('gbk')
print(new_s3) # b'\xd0\xa1\xc9\xfa'