1、Python编码解码:
文件转换为二进制,就是编码。
二进制转换为文本,就是解码。
2、ASCII编码:
字符‘a’在ASCII码表中的对应的数据就是97,二进制为1100001。
# 查看‘a’的ASCII编码
print(ord('a'))
# 转换为二进制数
print(bin(ord('a')))
# 将十进制数转为ASCII码
print(chr(97))
ASCII编码占用一个字节,也就是8位。2**8=256。ASCII编码覆盖了英文大小写、数字和特殊字符。
3、GB2312
《信息交换用汉字编码字符集》,中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。
基本集共收入汉字6763个核非汉字图形字符682个。整个字符集分94个区,每区有94位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。
把换成十六进制的区位码加上2020H,就得到了国标码。国标码加上8080H,就得到了常用的计算机内码。
GB2312的出现,基本上满足了汉字的计算机处理需要,它所收录的汉字已经覆盖了中国大陆99.75%的使用率。
对于人名、古汉语等方面出现的罕用字,GB2312不能处理,导致了GBK及GB18030汉字字符集的出现。
01-09区为特殊符号。
16-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有编码。
举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。
4、GBK:即汉字的内码拓展规范。共收入21886个汉字和图形符号。
5、GB18030:与GB2312-1980和GBK兼容,共收录汉字70244个,是一、二、四字节变长编码。
6、Unicode:每种语言都有自己独特的编码,那么计算机在跨语言进行信息传输的时候,就无法沟通,出现乱码,于是Unicode编码就产生了。Unicode使用2-4个字节编码,已经收录了136690个字符。把所有语言统一到一套编码中,这套编码就是Unicode编码,使用Unicode编码是不会出现乱码问题的。
Unicode使用两个字节表示一个字符,比较生僻的字符需要使用4个字符。
缺点:用Unicode编码存储会比用ASCII编码多用一倍空间!存储和网络传输的时候一般数据会用得比较多。
7、UTF编码:UTF编码将一个Unicode字符编码成1-6个字节。
常用的英文字母被编码为1个字节。
汉字通常是3个字节。
生僻的字符会被编码为4-6个字节。
说明:Unicode到UTF不是直接对应的,而是通过一些算法和规则转换的。
7.1 UTF-8: 英文占用1个字节,欧洲语系占用2个字节,东亚占用3个字节,其他及特殊字符占用4个字节。
7.2 UTF-16: 优先使用2个字节,否则使用4个字节表示。
7.3 UTF-32:使用4个字节表示所有字符。
print(list('常'.encode("utf-8")))
[229, 184, 184]
print(list('a'.encode("ascii")))
[97]
print(list('a'.encode("utf-8")))
[97]
print(list('a'.encode("gbk")))
[97]
我们可以看到,汉字是UTF-8的字符集中是3个字节,而英文,无论采用哪种编码,结果都是一致的。
Pycharm编辑器默认采用的是UTF-8编码,并保存为UTF-8编码的文本文件。
在Python3中所定义的字符串都是Unicode字符串,Unicode字符串可以编码为任意编码格式的字节码,解码时使用的同一编码解码即可得到原来的Unicode字符串。