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, 世界"

 

posted @ 2021-08-08 14:36  邵杠杠  阅读(81)  评论(0编辑  收藏  举报