python入门基础-编码的简单介绍

1.什么是编码

  不知道大家有没有遇到过这种情况,就是打开一个文档的时候,发现文档中的内容全部是乱码,可能有的人知道,这是编码惹的祸。那编码为什么会影响文档内容的显示呢?我是这样理解编码这件事,在计算机中所有数据的原型都是 0 或 1(高低电平),只有这样计算机才能正常的解读各类数据,但我们经常输入的是各类字符,并不会是0 1 0 1的输入,那计算机怎么也能正常执行的呢?那是因为在我们输入字符的过程中,有一位翻译官在帮我们将字符翻译成0或1给计算机,而这个翻译官就是编码。

  PS:不理解97的可以看下章中的对照表^_^

  计算机编码也分为多种,例如常见的ASCII、GB2312、GBK、GB18030、Unicode、Utf-8等,接下来我会逐一的介绍给大家。

2.ASCII编码

  ASCII(American Standard Code for Information Interchange,美国标准信息编码)是基于罗马字母表的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最早的单字节编码系统,只能是用8位来表示(1个字节),最多只能表示256个符号,也就是只能概括英文大小写字母、特殊符号和阿拉伯数字。

  占位规则:
    控制字符和通讯专用字符在第0~31号及第127号(共33个);
    阿拉伯数字在第48~57号;
    26个大写英文字母在65~90号;
    26个小写英文字母在97~122号;
    127号之内剩下的是一些标点符号;
    128~255号这些位置都没有被占用,是当初预留出来的,这样在每个8位二进制都是以0开头,例如0111 1111;

 

  通过上面的规则可以看出来,老外当初根本没有为我们天朝考虑啊!!!!没有中文相关的转换规则,所以文档中包含中文一定不能用ASCII编码。。。。。否则就是一堆大乱码

 

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)
删除

3.GB2313编码

  GB2312(信息交换用汉字编码字符集.基本集)又称为GB2312-80字符集,由原中国国家标准总局发布,覆盖99.75%的简体中文汉字,没有覆盖到繁体中文字。GB2312中简体中文用16位表示(2个字节),半角下的英文字母和数字用8位表示(1个字节),全角下的英文字母和数字用16位表示(2个字节)。

4.GBK编码

  GBK字节集是在GB2312的扩展版,扩展了繁体中文字的支持,完全兼容GB2312编码。GBK也是简繁体中文用16位表示(2个字节),半角下的英文字母和数字用8位表示(1个字节),全角下的英文字母和数字用16位表示(2个字节)。

5.GB18030编码

  GB18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,是在GBK的基础上扩展。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。
    1)ASCII码中的内容在GB18030中占用单字节;
    2)其它语种在GB18030中占用双字节或四字节;

6.Unicode编码

  Unicode字符集编码是(Universal Multiple-Octet Coded Character Set,通用多八位编码字符集)简称为UCS,支持世界上超过650种语言的国际字符集。
    UCS-2标准:规定一个字符必须是2个字节存储,大于2个字节的,需要用UCS-4标准。
    UCS-4标准:规定一个字符全部用4个字节存储。

7.Utf-8编码

  Utf-8是Unicode压缩和优化版本,其中ASCII码中的内容在utf-8中占用1个字节保存、欧洲字符在utf-8中占用2个字节保存,东南亚字符在utf-8中占用3个字节保存,辅助平面字符则使用4字节。
  还有Utf-16和Utf-32编码,utf-8最少用一个字节去表示,utf-16最少用两个字节去表示。

 8.字节转换

        1bit    x    8    =    1bytes
        1bytes    x    1024    =    1KB
        1KB    x    1024    =    1MB
        1MB    x    1024    =    1GB
        1GB    x    1024    =    1TB
        1TB    x    1024    =    1PB
        1PB    x    1024    =    1EB
        1EB    x    1024    =    1ZB
        1ZB    x    1024    =    1YB
     

9.编码发展总结

  引用知乎上“余洋”文档的介绍,下面是详细内容供大家参考。

  1)中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。
  2)汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时扩充了很多。
  3)中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。
  4)每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。
  5)终于,有个叫 ISO 的组织看不下去了。他们一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。
  6)UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16,分别每次传输 8个位和 16个位。于是就会有人产生疑问,UTF-8 既然能保存那么多文字、符号,为什么国内还有这么多使用 GBK 等编码的人?因为 UTF-8 等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。

   

https://www.zhihu.com/question/23374078/answer/69732605
来源

posted @ 2017-12-15 15:00  一拳法师  阅读(1529)  评论(0编辑  收藏  举报