前提:所有的数据如果存储在磁盘上或者通过网络发送,这些数据一定需要转化成0101010二进制。
编码本是什么?
人类可以识别的文字与二进制的对应关系。
-
ascii
存储的是英文字母、数字、特殊字符与二进制之间的对应关系。
一个字符 用一个字节表示。
-
GBK
国标,中国的GBK为例,英文字母、数字、特殊字符以及大部分汉字与二进制的对应关系。
一个字符(英数特) 用一个字节。 一个中文 用两个字节。
-
万国码unicode
将全世界所有的文字与二进制对应关系。
一个字符用四个字节表示。 a 0000 0101 0000 0101 0000 0101 0000 0101 中 0000 0101 0000 0101 0000 0101 0000 1101
-
utf-8
一个英数特 用一个字节。 一个欧洲字符 用两个字节。 一个中文 用三个字节。
-
单位转换
8 bit == 1 bytes 1024bytes == 1 Kb 1024Kb == 1 MB 1024 MB == 1 GB 1024 GB == 1 TB 1024 TB == 1 PB
1. 在计算机的内存中,所有的数据统一使用unicode编码的文本序列,当需要将这些数据保存到磁盘上或者通过网络发送出去,必须要转化成非unicode的字节序列。
文本序列:人类能看懂的序列(python中所有的数据类型)都是文本序列。 字节序列:b1 = b'xe4xb8xadxe5x9bxbd' (底层就是010101011) bytes类型
2.不同的字节序列不能互选转化。
不同的字节序列之间是不能互相转化,必须中间依赖于unicode的文本序列。
我们以网络传输为例,我们做一个流程:
python的基础数据类型bytes
| 类名 | str类型 | bytes类型 | 标注 |
|---|---|---|---|
| 名称 | str,字符串,文本序列 | bytes,字节序列 | 不同,可以通过文本文字或者字节文字加以区分 |
| 组成单位 | 字符 | 字节 | 不同 |
| 组成形式 | ‘’ 或者 “” 或者 ‘’’ ‘’’ 或者 “”" “”" | b’’ 或者 b"" 或者 b’‘’ ‘’’ 或者 b"“” “”" | 不同,bytes类型就是在引号前面+b(B)大小写都可以 |
| 表现形式 | 英文: ‘alex’ 中文: ‘中国’ | 英文:b’alex’中文:b’xe4xb8xadxe5x9bxbd’ | 字节文字对于ascii中的元素是可以直接显示的,但是非ascii码中的元素是以十六进制的形式表示的,不易看出。 |
| 编码方式 | Unicode | 可指定编码(除Unicode之外)比如UTF-8,GBK 等 | 不同 |
| 相应功能 | upper lower spllit 等等 | upper lower spllit 等等 | 几乎相同 |
| 转译 | 可在最前面加r进行转译 | 可在最前面加r进行转译 | 相同 |
| 重要用途 | python基础数据类型,用于存储少量的常用的数据 | 负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等 | bytes就是用于数据存储和网络传输数据 |
| 更多 | … | … |
-
unicode文本序列转化成非unicode的字节序列
文本序列----> 字节序列过程叫做编码encode。
# msg = 'barry' msg = '中国' # unicode转化成非unicode bu = msg.encode('utf-8') # 编码 print(bu) # utf-8的字节序列 bu2 = msg.encode('gbk') print(bu2) # gbk的字节序列 -
非unicode的字节序列转化成unicode的文本序列。
字节序列 ------> 文本序列的过程叫做解码decode。
# b1 = b'xe4xb8xadxe5x9bxbd' # utf-8的字节序列 # 解码 # msg1 = b1.decode('utf-8') # print(msg1) b2 = b'xd6xd0xb9xfa' # gbk的字节序列 msg2 = b2.decode('gbk') print(msg2) -
Utf-8的字节序列如何转化成gbk的字节序列。
b1 = b'xe4xb8xadxe5x9bxbd' # utf-8的字节序列 # 先解码 msg = b1.decode('utf-8') # 在编码 b2 = msg.encode('gbk') print(b2) # b'xd6xd0xb9xfa'
-
作业
-
总结笔记。
-
将之前讲的所有的知识点复习。
定义概念 背。 课上讲的题,作业,一看不会的,再做一遍。
-
今日作业
-
bytes数据类型是python的基础数据类型,bytes类型存在的意义是什么?
-
列举bytes类型与str类型的三个不同点?
-
完成下列需求:
s1 = '太白金星' # 将s1转换成utf-8的bytes类型。 # 将s1转化成gbk的bytes类型。 b = b'xe5xa4xaaxe7x99xbdxe6x9cx80xe5xb8x85' # b为utf-8的bytes类型,请转换成gbk的bytes类型。
-
-



