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)
|
删除
|
Python笔记·第二章—— Python的编码问题(一)的更多相关文章
- [Python笔记][第二章Python序列-复杂的数据结构]
2016/1/27学习内容 第二章 Python序列-复杂的数据结构 堆 import heapq #添加元素进堆 heapq.heappush(heap,n) #小根堆堆顶 heapq.heappo ...
- [Python笔记][第二章Python序列-tuple,dict,set]
2016/1/27学习内容 第二章 Python序列-tuple tuple创建的tips a_tuple=('a',),要这样创建,而不是a_tuple=('a'),后者是一个创建了一个字符 tup ...
- [python笔记][第二章Python序列-list]
2016/1/27学习内容 第二章 Python序列-list list常用操作 list.append(x) list.extend(L) list.insert(index,x) list.rem ...
- Python笔记·第一章—— Python基础(一)
一.Python的简介 1.Python的由来与版本 1.1 python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文 ...
- [Python笔记][第一章Python基础]
2016/1/27学习内容 第一章 Python基础 Python内置函数 见Python内置函数.md del命令 显式删除操作,列表中也可以使用. 基本输入输出 input() 读入进来永远是字符 ...
- Python自学:第二章 Python之禅
>>print import <Python之禅>,提姆·彼得斯著 美胜于丑. 显式优于隐式. 简单胜于复杂. 复杂总比复杂好. 平的比嵌套的好. 稀疏胜于稠密. 可读性计数. ...
- 第二章Python入门
第二章 Python入门 2.1.简介 Python是著名的"龟叔"(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言 Pytho ...
- Android群英传笔记——第二章:Android开发工具新接触
Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
随机推荐
- How to set up Dynamics CRM 2011 development environment
Recently I have been starting to learn Microsoft Dynamics CRM 2011 about implement plugin and workfl ...
- NoSQL:linux操作memcached
缓存数据库 一 NoSQL简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库,随着互联网web2.0网站的兴起,传统的关系 ...
- centos7 jdk8 tomcat8 安装
安装jdk # cd /opt/# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F ...
- mac 安装protobuf,并编译
因公司接口协议是PB文件,需要将 PB 编译成JAVA文件,且MAC 电脑,故整理并分享MAC安装 google 下的protobuf 文件 MAC 安装protobuf 流程 1.下载 http ...
- Vue-cli创建项目从单页面到多页面2-history模式
之前讲过怎样将vue-cli创建的项目改造成多页面(vue-cli创建项目从单页面到多页面),今天说一下怎样在多页面的前提下使用history模式. 如何使用history模式 因为vue默认的has ...
- opengl启动过程
GLuint _program = glCreateProgram(); //create shader program GLuint vertShader, fragShader;//顶点着色器,片 ...
- c# winform 窗体之间的传参
说起winform程序中窗体之间的参数互传,大家找度娘会找到很多方法: 1.在窗体类中创建全局变量,类型为公开.静态的: 2.在窗体类中定义狗仔函数: 3.通过实践来船体参数: 这三种思路完全来自于霖 ...
- nginx使用replace-filter-nginx-module实现内容替换
有时候我们想对响应(例如PHP接口)返回的内容做些字符串,虽然可以使用各语言代码相关方法(例如PHP的str_replace)进行替换,但是在nginx层面替换是更方便的,无需修改代码. 约定:本文源 ...
- ios多线程开发总结
1>无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU空闲时就会执行). 2>更新UI应该在主线程(UI线程)中进行,并且推荐使用同步 ...
- Libevent 事件循环(2)---事件被加入激活队列
由Libevent 事件循环(1) 在上文中我们提到了libevent 事件循环event_dispatch 的大致过程,以epoll为例,我们看一下事件被如何加入激活队列. //在epoll_dis ...