UTF-8(表示每次8个位传输数据)通用性比较好,是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。

UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示,也就是必须两者都是utf-8才行。

gbk是是国家编码,通用性比UTF8差,GB2312之类的都算是gbk编码。

GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

unicode是一种二进制编码,所有utf-8和gbk编码都得通过unicode编码进行转译,即utf-8和gbk编码之间不能直接转换。

python中编码转换用到了两个函数decode()和encode()
  比如:

        html=page_req.text.encode('iso-8859-1').decode('utf-8')
  encode('iso-8859-1') 是将gbk编码编码成unicode编码
  decode(‘gbk’) 是从unicode编码解码成gbk字符串

 Unicode编码
Unicode 没有规定字符对应的二进制码如何存储,它包含世界上所有的语言字符,字符顺序越靠后的,它存储所需的字节数就越多,所占的空间也就越大。如果统一成Unicode编码,乱码问题也就解决了,但是如果你写的全是英文的话(ASCII中本该用最少字节的字符),用Unicode编码比ASCII编码需要多一倍甚至更多的空间,这就会导致存储和网络传输时的一般数据会非常多,极大的浪费了空间。意识到这个问题后,UTF编码就诞生了。

二. UTF-8编码
Unicode Transformation Format,简称UTF,对unicode字符进行转换,以便于在存储和网络传输时可以节省空间。
UTF编码有3个版本:

UTF-32 :使用4个字节表示所有字符。一定程度的减少了浪费。
UTF-16:使用2,4两种字节表示所有字符;优先使用2个字节,否则使用4个字节。比UTF-32更有效,但还不够完美。
UTF-8:使用1,2,3,4种字节表示所有字符,优先使用1字节,无法满足则增加一个字节,最多4个字节。英文占一个字节,欧洲其他语系占两个,东亚占3个,其他特殊字符占四个。完美的节省了空间
需要注意的是:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,才转换成UTF-8编码。

三. GBK编码
GBK编码采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。支持中文繁体字。国家曾规定所有微软的软件进入中国都要默认GBK编码,所以win系统 默认编码也为GBK。