编码
1.什么是编码
计算机只认识机器码,即0和1,将文字转换为机器码就是编码
2. ASCII
计算机创建初期,美国,是7位一段,但是发明者说为了拓展,留出一位,这样就是8位一段句。
随着计算机的发展. 以及普及率的提高. 流⾏到欧洲和亚洲. 这时ASCII码就不合适了. 比如: 中⽂汉字有几万个. 而ASCII 多也就256个位置. 所以ASCII不能满足需求了. 这时, 不同的国家就提出了不同的编码用来适用于各自的语言环境. 比如, 中国的GBK, GB2312, BIG5, ISO-8859-1等等. 这时各个国家都可以使用计算机了.
3. GBK
GBK, 国标码占用2个字节. 对应ASCII码 GBK直接兼容. 因为计算机底层是用英文写的. 所以需要兼容英文. 而英文已经使用了ASCII码. 所以GBK要兼容ASCII. 这里GBK国标码. 前⾯的ASCII码部分. 由于使⽤两个字节. 所以对于ASCII码⽽言. 前9位都是0
字母A:0100 0001 # ASCII
字母A:0000 0000 0100 0001 # 国标码
随着全球化的普及,发展到欧洲,亚洲等国家,发现这些根本不够用,所以创建了万国码。 因为全球语言很多,ascii不足以存储这么多对应关系,创建了一个超级密码本:万国码unicode
4. Unicode
创建之初,16位,2个字节,表示一个字符. 英文: a b c 六个字节 一个英文2个字节 中文 中国 四个字节 一个中文用2个字节
但是这种也不行,这种最多有65535种可能,可是中国文字有9万多,所以改成 32位,4个字节,表示一个字符.
5. UTF-8
对Unicode进行升级: utf-8 utf-8 用最少用8位数,去表示一个字符. 英文: 8位,1个字节表示. 欧洲文字: 16位,两个字节表示一个字符. 中文,亚洲文字: 24位,三个字节表示.
utf-16 用最少用16位数。
gbk: 国标,只能中国人自己用, 一个中文用16位,两个字节表示。
名称 | 字节 | 位数 |
---|---|---|
ascii 美国 | 1字节 | 8位 |
gbk 中国 | 中文 2字节 | 16位 |
英文 1字节 | 8位 | |
unicode 万国码 | 2字节 | 16位 |
4字节 | 32位 | |
utf-8 可变编码 | 英文 1字节 | 8位 |
欧洲 2字节 | 16位 | |
亚洲 3字节 | 24位 |
单位转化
8bit = 1byte
1024byte = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
1024TB = 1EB
1024EB = 1ZB
1024ZB = 1YB
1024YB = 1NB
1024NB = 1DB
二次编码
- 在计算机内存中,统一使用Unicode编码,当需要将数据保存到硬盘或者需要网络传输的时候,就转换为非Unicode编码比如:UTF-8编码。
- 不同编码之间,不能直接互相识别。
编码
代码:
name = "张三"
print(name.encode("utf-8"))
结果:
b'\xe5\xbc\xa0\xe4\xb8\x89'
解码
代码:
name_coding = "张三".encode("utf-8")
print(name_coding)
name_decode = name_coding.decode("utf-8")
print(name_decode)
结果:
b'\xe5\xbc\xa0\xe4\xb8\x89'
张三