Select Language

AI社区

AI技术百科

2.11、Python字节流

我们知道在计算机存储中,最小的存储单位是字节。每个字节有 8 位,所以每个字节的取值范围是 0~255。

在早期,使用一个字节来表示一个字符,这就是有名的 ACSII 码。表1所示是 ASCII 码的定义,不过我们仅列出了前面的 128 个字符,这也是最早期的 ASCII 码。

表1:ASCII 编码一览表
ASCII码值含 义
0空字符,在有些语言中作为字符串的结尾字符使用
1标题开始
2正文开始
3正文结束
4传输结束
5请求
6收到通知
7响铃
8退格,相当于删除前一个字符
9水平制表符
10换行键
11垂直制表符
12换页键
13回车键
14不用切换
15启用切换
16数据链路转义
17设备控制1
18设备控制2
19设备控制3
20设备控制4
21拒绝接收
22同步空闲
23结束传输块
24取消
25媒介结束
26代替
27换码
28文件分隔符
29分组符
30记录分隔符
31单元分隔符
32空格,也就是相当于按了键盘上最长的那个键
33!(叹号),不是中文的叹号,对应的是键盘上和1共用的那个键
34"(双引号),不是中文的双引号
35#(井号),也就是 Python 中的注释开始的字符
36$(美元符)
37%(百分号),就是整数取余数的那个操作符
38&,就是整数按位与的那个操作符
39'(单引号)
40((开括号)
41)(闭括号)
42*,就是整数乘法运算符
43+(加号)
44,(逗号)
45-(减号)
46.(小数点)
47/(除号),也可以为目录路径分隔符,如 c:/temp/a.py
48数字字符 0。数字字符是连续的,0 和 1 相差一个码,1 和 2 也相差一个码,依次类推
49数字字符1
50数字字符2
51数字字符3
52数字字符4
53数字字符5
54数字字符6
55数字字符7
56数字字符8
57数字字符9
58: 冒号
59; 分号
60< 小于号
61= 等号,在 Python 中作为赋值符号使用
62> 大于号
63? 问号
64@ 电子邮件符号
65大写字母A。大写字母也是连续的,A 和 B 相差一个码,B 和 C 也相差一个码,依次类推
66大写字母B
67大写字母C
68大写字母D
69大写字母E
70大写字母F
71大写字母G
72大写字母H
73大写字母I
74大写字母J
75大写字母K
76大写字母L
77大写字母M
78大写字母N
79大写字母O
80大写字母P
81大写字母Q
82大写字母R
83大写字母S
84大写字母T
85大写字母U
86大写字母V
87大写字母W
88大写字母X
89大写字母Y
90大写字母Z
91[,这个在 Python 中作为列表的开始符
92\(反斜杠),通常作为转义字符使用,比如“\n”表示换行符
93]
94^,在Python中作为异或操作符
95_(下划线)
96`
97小写字母a。小写字符也是连续的,a 和 b 相差一个码,b 集合 c 相差一个码,依次类推
98小写字母b
99小写字母c
100小写字母d
101小写字母e
102小写字母f
103小写字母g
104小写字母h
105小写字母i
106小写字母j
107小写字母k
108小写字母l
109小写字母m
110小写字母n
111小写字母o
112小写字母p
113小写字母q
114小写字母r
115小写字母s
116小写字母t
117小写字母u
118小写字母v
119小写字母w
120小写字母x
121小写字母y
122小写字母z
123{
124|,在 Python 中表示或的位操作
125}
126~,在 Python 中表示取反的位操作
127删除,就是按了 Del 键的输入


由于 ASCII 码最多只能表示 256 个字符,所以非拉丁字母就很难用 ASCII 码表示。为了解决该问题,人们就定义了 Unicode,单个字符用 16 位或者 32 位来表示。这时字符和字节之间就没有直接对应的关系了。

在 Python 中,字符串和字节流是两个不同的数据类型。字节流主要用在二进制数据、网络传输的数据方面,字符串则用在文本文件、用户 IO 等方面。字节流的定义如下:

>>> var1 = b'abc'  # 定义字节流,3个字节,内容依次是a、b、c
>>> type(var1)     # 查看其类型
<class 'bytes'>


在 Python 中,字节流和字符串之间是可以相互转换的。尤其是在拉丁字母组成的字符串和字节流之间的相互转换是很简单的。

>>> 'abc'.encode("ascii")   # 将字符串按照ASCII编码方式来编码
b'abc'                      # 得到字节流
>>> b'abc'.decode("ascii")  # 将字节流按照ASCII编码方式来解码
'abc'


需要注意的是,并不是所有的字节流都可以用任意编码方式来解码。

>>> b'abc'.decode("utf-8")   # 用utf-8来解码是没有问题的
'abc'
>>> b'abc'.decode("utf-16")  # 用utf-16来解码是有问题的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x63 in position 2:
truncated data


我要发帖
  • 26

    条内容
Python基本数据类型一共26个章节
本章将介绍 Python 内置的基本数据类型,包括整型、浮点数、字符串、布尔型、列表、元组、集合和字典等 Python 定义的基本数据类型,以及这些数据类型的运算操作。
我们知道,Python 是强类型语言,每个变量在某个时刻的类型是确定的。也就是说,Python 中任意一个存活的对象,其类型是唯一的。不同类型的对象有不同的属性,能完成不同的操作。
另外本章最后还会介绍变量、对象等概念。每个对象都有一个确定的类型,每个变量都指向某个特定的对象。