编码
编码
一、编码种类
1. ASCII
- 基于拉丁字母的一套电脑编码系统
- 其最多只能用8位来表示(一字节)
Bin(二进制) | Dec(十进制) | 缩写/字符 | 解释 |
01000001 | 65 | A | 大写字母A |
01100001 | 97 | a | 小写字母a |
2. GBK
- 国标码(GB2312)的扩展码
- 一个字符占用16bit,两字节
- 最多可容纳2**16 = 65536字符
-
程序无法跨平台使用
3. Unicode
- 万国码,目的把全世界所有国家的文字信息进行编码
- 一个字符占用32位,四字节
4. UTF-8
- 可变长度的编码
- 每个字符占用的字节数不定,根据文字内容进行编码。
不同字符占用字节数:
- 英文:1字节
- 欧洲文字:2字节
- 中文:3字节
二、单位转换
- 8bit = 1 byte
- 1024byte = 1KB
- 1024KB = 1MB
- 1024MB = 1GB
- 1024GB = 1TB
- 1024TB = 1PB
- 1024PB = 1EB
- 1024EB = 1ZB
- 1024ZB = 1YB
- 1024YB = 1NB
- 1024NB = 1DB
三、编码和解码
- python2中默认使用的是ASCII码。所以不支持中文。如果需要在Python2中更改编码。需要在文件的开始编写:
# _*_ encoding:utf-8 _*_
- python3中,内存中使用的是unicode码。
在python3内存中,在程序运行阶段,使用的是unicode编码。因为unicode是万国码。什么内容都可以进行显示。那么在数据传输和存储时由于unicode比较浪费空间和资源。需要把unicode转存成UTF-8或GBK进行存储。
编码之后的数据是bytes类型的数据。
1. bytes的表现形式:
- 英文:英文的表现形式和字符串相差不大,前面多个"b"
- 中文:中文编码之后的结果根据编码的不同,编码结果也不同,一个中文的UTF-8编码是3个字节,一个GBK的中文编码是2个字节。
a = "hello" b = "中" print(a.encode("utf-8")) # b'hello' print(b.encode("utf-8")) # b'\xe4\xb8\xad' print(b.encode("gbk")) # b'\xd6\xd0'
2.编码和解码
- encode():编码
- decode():解码
以何种编码编码,就须以该种编码解码。否则,解码不成功,得不到想要的内容。
a = "编码" print(a.encode("utf-8")) # b'\xe7\xbc\x96\xe7\xa0\x81' b = b'\xe7\xbc\x96\xe7\xa0\x81' print(b.decode("utf-8")) # 编码
不同编码之间的转换:
# GBK 转换成 UTF-8 s = "我是文字" bs = s.encode("gbk") # 把GBK转换成unicode,也就是解码 s = bs.decode("gbk") # 重新编码成UTF-8 bss = s.encode("utf-8") print(bss)