什么是编码
百度百科:编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。
编码格式有哪些
常用的有ASCII、GBK、UTF8、Unicode
为什么有这么多编码格式呢?
在起初编码格式是由国外技术人员设计,通用使用到的字符就是英文字符,所以仅需要ascii就可以完全表示,但是随着技术在全球的普及,更多的语言需要在计算机中存储以及展示,例如中文、日文、韩文等等,所以拓展了很多的编码格式。为了统一编码格式,所以最后推广出了Unicode作为通用编码格式,Unicdoe用两个字节即16位来表示一个字符,可以提供65535种字符,足够覆盖世界上的所有符号。
Unicode就能覆盖所有符号,为什么还需要UTF8
Unicode确实能覆盖目前所有的符号,但是由于占用的2个字节,而有些符号仅仅可能只需要半个字节就能表示,所以会在传输过程中造成浪费。UTF8就使用可变长度来很好的解决了这个传输中浪费的问题。所以我们通常使用Unicode作为通用字符,在各个字符格式中转化,使用UTF8编码在传输中优化大小。
在pthon2中编码格式之间的关系是怎样的

python2 中默认的str编码格式为ascii,所以当你使用中文作为一个变量的值时会报错,需要手动修改编码格式,例如在文件开头添加# -- coding: UTF-8 -- 或者 # coding=utf-8。
python2 中字符编码与字节编码关系

python2 中str 类型默认存储为Bytes,编码格式根据文件定义的编码格式,默认ascii。 Unicode类型为Unicode编码格式,与str转换时使用encode与decode进行
python3中编码格式
python3中默认使用了utf8作为编码格式
python3 中字符编码与字节编码关系


python 2/3 中怎么灵活使用呢?
python2
有两种字符串数据类型。str对象,存储着Bytes。Unicode对象,在字符串加“u”前缀。都是字符串类型,它们之间的关系上面已经介绍,通过encode与decode相互转化。由于python2 默认编码格式为unicode所以在我们使用时有时会出现一下报错
UnicodeDecodeError: ‘ascii’ codec can’t decode byte
这就是由于str类型python2会悄悄帮我们转化为unicdoe,而你写入str对象中的字符不在ascii码表中,所以无法转化导致报错。所以我们需要改变默认的编码类型,例如使用
reload(sys)
sys.setdefaultencoding("utf-8")
修改默认的编码类型,这时候如果你的str对象中为中文也不会转化为unicode时报错。
python3
默认使用编码格式为utf8就减少了这方面的麻烦,而且清晰分离出两种对象,str(unicdoe编码), Bytes(字节码)。没有了python中各种编码的转化问题。