8.Python基础篇-编码方式
编码基础知识
8位bit == 1个字节(byte)
1024个字节(byte)==1kb
1024kb == 1MB
1024MB == 1GB
1024GB == 1TB
几种常用编码方式介绍
ASCLL码
每8位bit为一个字节
由于设计之初只考虑了美国本土使用,所以只需要7位bit就足够组合出26个大写字母+小写字母,以及特殊符号(2**7 = 128)。但是还是预留了一位,所以我们看到的ASCLL码的第一位数字都是0。
但是光汉字有9万多个,8位bit不够用。为了解决这个问题这个全球化的文字问题,创建了一个“万国码”:《unicode》
unicode
最开始的unicode
用一个字节去表示所有英文字母,英文字符,数字等。(1个字节 == 8个bit)
用2个字节表示所有的中文,不够。所以就用四个字节表示(4个字节==32位bit,2**32=4294967296)。但是中文只有9万多个,很浪费空间,于是便出了一个Unicode的升级版:《utf-8》
utf-8
英文1个字节表示(8位)
一个中文用3个字节表示(3字节==24位bit,2**24=16777216,包含9万个中文足够了)
GBK
国内使用,中国人自己创造的编码方式,只包含了中文和英文。
英文:使用1个字节表示(8位)
中文:使用2个字节表示(16位)
Python中的encode与decode方法
背景
- 文件的存储(硬盘)和网络传输不能使用Unicode编码,需要使用utf-8,GBK等。主要因为Unicode要比别的更浪费空间。
- 各个编码之间的二进制,是不能互相识别的,会产生乱码。
- python 3 中字符串在内存中默认使用Unicode编码存储
- 基于上面的条件,Python3中要想使用网络传输,就需要将Unicode转为utf-8,以便于网络传输。此时就需要使用encode()方法
encode()使用
将字符串以指定的编码方式转化为bytes原始字节序列。
下面的案例意思是,将str即unicode编码的字符串,使用encode方法,转换为utf-8的字节码(bytes类型)
# 将字符串编码转换为 UTF-8 s = "Hello, 世界" # python3中字符串默认是Unicode存储 byte_data = s.encode('utf-8') # 理解为Unicode转utf-8 print(byte_data) # 输出: b'Hello, \xe4\xb8\x96\xe7\x95\x8c'
decode()使用
# 有一个 UTF-8 编码的字节流 byte_data = b'Hello, \xe4\xb8\x96\xe7\x95\x8c' # 将字节流解码为字符串。即utf-8编码的字节流转换为Unicode的字符串 s = byte_data.decode('utf-8') # 传入的参数为该字节流的编码方式 print(s) # 输出: "Hello, 世界"