专栏首页抠抠空间Python的编码问题(一)

Python的编码问题(一)

一、什么是编码

  可以说,计算机是一个即聪明又笨蛋的家伙。说它聪明,是因为他可以做很多事情,它的强大无需多说,大家应该都有所了解以及感受。但是为什么说它又是个笨蛋呢,因为我们在电脑上写出的每一个字,保存的每一句语音、歌曲以及小电影,它通通不认识,因为这些东西不是它所能读懂的东西。而如果我们让它做一些事情,那么必须用它所能读懂的语言来让他们为我们服务。那么就需要定义一套它能读懂的“语言“标准,而这个“语言”,就叫做编码。

二、编码的种类以及发展

  我们都知道,电脑之所以能读懂数据,是因为它里面由许多许多的二极管,每个二极管就像一个小灯泡,而小灯泡的状态只有两个,要么亮,要么不亮。那么我们用0表示不亮,用1表示亮的话,每个小灯泡就会有两个值了,0和1.那么如果有两个小灯泡,那么它就有4种可能,00,01,10,11。假如我们用00表示A、01表示B,10表示C,11表示D,那么两个小灯泡就可以表示4个因为字母啦!同理,3个小灯泡就可以表示8个字母……依次类推,我们可以用许许多多的小灯泡来表示N种字母啦。

  所以,最古老的编码类型ASCASCII码就出现啦!

  大家都知道,计算机是美国人发明的,他们开始并没有想着计算机会发展这么快,普及这么广,所以只定义了他们所用的英文字母以及字符,而这些字母或者字符,用7位的0、1组合足以,不过他们预见将来有可能会有更多的字符加进来,所以多预留了一位以便后来能表示更多的字符(这就是为什么ASCII的首位均为0),于是决定每一个字符用0或组成的8位来表示,这样就可以表示 2**8 = 256种可能了。

  问题是,他们虽然聪明的预见将来有可能会有更多的字符加进来,但是他们还是保守了点,随着计算机功能越来越强,使用越来越广,有越来越多的国家引进计算机,仅仅只有256种字符的ASCII码已经远远不能满足了。

  于是,又出现了一种更强大的编码,Unicode编码,也叫万国码。Unicode码规定一个字符至少要用2个字节(1个字节是8位)来表示,这样就至少有2**16=65536种可能了。但是后来发现,65536种可能也不足以表示全世界所有的字符,大家都知道,只是中文就有好几万种字符,于是后来有出现了增补码,用4个字节(32位)来表示,这样就有2*32种可能了,这足以表示全世界所有的字符了。

  问题又来了,明明因为字母以及符号只用8位就能表示了,结果Unicode编码要用32位来表示,而实际使用总英文字母要占很大一部分比例,这就造成了严重的资源浪费,白白浪费了很大的储存空间,所以后来又出现了另一种编码,UTF-8

  UTF-8编码是对Unicode编码的优化,它规定,英文字母用一个字节表示,欧洲的一些符号用2个字节来表示,亚洲国家的一些字符用3个字节来表示,这就合理了很多,该长的长,该短的短。

三、Python的默认编码

    ▷python2版本中默认的字符编码是ASCII码,如果要显示中文必须要在代码的首行写“  # -*- encoding:utf-8 -*-    ”来指定编码

    ▷python3版本种默认的字符编码是UTF-8,就可以显示中文了

四、换算关系

    ▷1位 = 1bit

    ▷8bits = 1bytes = 1字节

    ▷1024bytes = 1KB

    ▷1024KB = 1MB

    ▷1024MB = 1GB

    ▷1024GB = 1TB

五、附录:ASC码大全

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,

其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

Bin(二进制)

Oct(八进制)

Dec(十进制)

Hex(十六进制)

缩写/字符

解释

0000 0000

0

0

00

NUL(null)

空字符

0000 0001

1

1

01

SOH(start of headline)

标题开始

0000 0010

2

2

02

STX (start of text)

正文开始

0000 0011

3

3

03

ETX (end of text)

正文结束

0000 0100

4

4

04

EOT (end of transmission)

传输结束

0000 0101

5

5

05

ENQ (enquiry)

请求

0000 0110

6

6

06

ACK (acknowledge)

收到通知

0000 0111

7

7

07

BEL (bell)

响铃

0000 1000

10

8

08

BS (backspace)

退格

0000 1001

11

9

09

HT (horizontal tab)

水平制表符

0000 1010

12

10

0A

LF (NL line feed, new line)

换行键

0000 1011

13

11

0B

VT (vertical tab)

垂直制表符

0000 1100

14

12

0C

FF (NP form feed, new page)

换页键

0000 1101

15

13

0D

CR (carriage return)

回车键

0000 1110

16

14

0E

SO (shift out)

不用切换

0000 1111

17

15

0F

SI (shift in)

启用切换

0001 0000

20

16

10

DLE (data link escape)

数据链路转义

0001 0001

21

17

11

DC1 (device control 1)

设备控制1

0001 0010

22

18

12

DC2 (device control 2)

设备控制2

0001 0011

23

19

13

DC3 (device control 3)

设备控制3

0001 0100

24

20

14

DC4 (device control 4)

设备控制4

0001 0101

25

21

15

NAK (negative acknowledge)

拒绝接收

0001 0110

26

22

16

SYN (synchronous idle)

同步空闲

0001 0111

27

23

17

ETB (end of trans. block)

结束传输块

0001 1000

30

24

18

CAN (cancel)

取消

0001 1001

31

25

19

EM (end of medium)

媒介结束

0001 1010

32

26

1A

SUB (substitute)

代替

0001 1011

33

27

1B

ESC (escape)

换码(溢出)

0001 1100

34

28

1C

FS (file separator)

文件分隔符

0001 1101

35

29

1D

GS (group separator)

分组符

0001 1110

36

30

1E

RS (record separator)

记录分隔符

0001 1111

37

31

1F

US (unit separator)

单元分隔符

0010 0000

40

32

20

(space)

空格

0010 0001

41

33

21

!

叹号

0010 0010

42

34

22

"

双引号

0010 0011

43

35

23

#

井号

0010 0100

44

36

24

$

美元符

0010 0101

45

37

25

%

百分号

0010 0110

46

38

26

&

和号

0010 0111

47

39

27

'

闭单引号

0010 1000

50

40

28

(

开括号

0010 1001

51

41

29

)

闭括号

0010 1010

52

42

2A

*

星号

0010 1011

53

43

2B

+

加号

0010 1100

54

44

2C

,

逗号

0010 1101

55

45

2D

-

减号/破折号

0010 1110

56

46

2E

.

句号

00101111

57

47

2F

/

斜杠

00110000

60

48

30

0

数字0

00110001

61

49

31

1

数字1

00110010

62

50

32

2

数字2

00110011

63

51

33

3

数字3

00110100

64

52

34

4

数字4

00110101

65

53

35

5

数字5

00110110

66

54

36

6

数字6

00110111

67

55

37

7

数字7

00111000

70

56

38

8

数字8

00111001

71

57

39

9

数字9

00111010

72

58

3A

:

冒号

00111011

73

59

3B

;

分号

00111100

74

60

3C

<

小于

00111101

75

61

3D

=

等号

00111110

76

62

3E

>

大于

00111111

77

63

3F

?

问号

01000000

100

64

40

@

电子邮件符号

01000001

101

65

41

A

大写字母A

01000010

102

66

42

B

大写字母B

01000011

103

67

43

C

大写字母C

01000100

104

68

44

D

大写字母D

01000101

105

69

45

E

大写字母E

01000110

106

70

46

F

大写字母F

01000111

107

71

47

G

大写字母G

01001000

110

72

48

H

大写字母H

01001001

111

73

49

I

大写字母I

01001010

112

74

4A

J

大写字母J

01001011

113

75

4B

K

大写字母K

01001100

114

76

4C

L

大写字母L

01001101

115

77

4D

M

大写字母M

01001110

116

78

4E

N

大写字母N

01001111

117

79

4F

O

大写字母O

01010000

120

80

50

P

大写字母P

01010001

121

81

51

Q

大写字母Q

01010010

122

82

52

R

大写字母R

01010011

123

83

53

S

大写字母S

01010100

124

84

54

T

大写字母T

01010101

125

85

55

U

大写字母U

01010110

126

86

56

V

大写字母V

01010111

127

87

57

W

大写字母W

01011000

130

88

58

X

大写字母X

01011001

131

89

59

Y

大写字母Y

01011010

132

90

5A

Z

大写字母Z

01011011

133

91

5B

[

开方括号

01011100

134

92

5C

\

反斜杠

01011101

135

93

5D

]

闭方括号

01011110

136

94

5E

^

脱字符

01011111

137

95

5F

_

下划线

01100000

140

96

60

`

开单引号

01100001

141

97

61

a

小写字母a

01100010

142

98

62

b

小写字母b

01100011

143

99

63

c

小写字母c

01100100

144

100

64

d

小写字母d

01100101

145

101

65

e

小写字母e

01100110

146

102

66

f

小写字母f

01100111

147

103

67

g

小写字母g

01101000

150

104

68

h

小写字母h

01101001

151

105

69

i

小写字母i

01101010

152

106

6A

j

小写字母j

01101011

153

107

6B

k

小写字母k

01101100

154

108

6C

l

小写字母l

01101101

155

109

6D

m

小写字母m

01101110

156

110

6E

n

小写字母n

01101111

157

111

6F

o

小写字母o

01110000

160

112

70

p

小写字母p

01110001

161

113

71

q

小写字母q

01110010

162

114

72

r

小写字母r

01110011

163

115

73

s

小写字母s

01110100

164

116

74

t

小写字母t

01110101

165

117

75

u

小写字母u

01110110

166

118

76

v

小写字母v

01110111

167

119

77

w

小写字母w

01111000

170

120

78

x

小写字母x

01111001

171

121

79

y

小写字母y

01111010

172

122

7A

z

小写字母z

01111011

173

123

7B

{

开花括号

01111100

174

124

7C

|

垂线

01111101

175

125

7D

}

闭花括号

01111110

176

126

7E

~

波浪号

01111111

177

127

7F

DEL (delete)

删除

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Install Python3.6.x on CentOS7

    ---- 概述 在之前的文章中,我已经介绍了在CentOS6中安装Python2.7.x和Python3.4.x。请参考源码编译安装或者升级Python在Cen...

    BrianLv
  • Python Data Model

    概述 最近在看《Fluent Python》一书,书中解释了Python很多重要的设计理念和实践,下面是我在看此书的读书笔记。Python的设计思想主要体现在它...

    BrianLv
  • Python 多线程的同步方法

    ---- 概述 这篇博客是我翻译Python threads synchronization: Locks, RLocks, Semaphores, Condi...

    BrianLv
  • 技术 | Python从零开始系列连载(七)

    导读 上一期学习了Python程序的基本控制流程,相信大家都已经熟悉啦,我们这一期就来学习Python特色数据类型(列表)吧! Python特色数据类型(列表)...

    灯塔大数据
  • 技术 | Python从零开始系列连载(八)

    导读 上一期学习了Python特色数据类型(列表)上半节,相信大家都已经熟悉啦,我们这一期就来学习Python特色数据类型(列表)下半节吧! 列表切片 列表切片...

    灯塔大数据
  • 手把手 | 教你用Python创建微信聊天机器人

    前言 最近研究微信 API,发现个非常好用的 python 库:wxpy。wxpy 基于 itchat,使用了 Web 微信的通讯协议,实现了微信登录、收发消息...

    灯塔大数据
  • 你知道 Python 这五个有趣的彩蛋吗?

    当一门编程语言是开源的时候,往往会有产生一些搞笑和有趣的东西。通常,这意味着社区的贡献者会为该语言添加一些有趣和特别的彩蛋以及隐藏的特性(当然前提是不会增加在生...

    前朝楚水
  • 塔秘 | 极简Python带你探索分类与回归的奥秘

    前言 本文从分类和回归两个方面介绍了基本的监督学习方法,并用Scikit-Learn做了实例演示。 ? 为何使用人工智能和机器学习? 地球的未来在于人工智能和机...

    灯塔大数据
  • 数据分析利器-NumPy

    ---- 概述 NumPy类库是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list s...

    BrianLv
  • Python GIL

    ---- 概述 GIL(Global Interpreter Lock)是什么东东?为什么当一些Pythoners在开发一些多线程操作的时候,都会有些很...

    BrianLv

扫码关注云+社区

领取腾讯云代金券