python2.x编码的一些理解

https://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html

http://blog.****.net/q_l_s/article/details/51253542

版本 Python2.7

1.序言

   Python的字符编码方式有多种,主要默认用的为utf-8变长编码,而windows的默认编码方式为gbk,如果没有理解错的话,应该是utf-8这种编码方式兼容GBK码和ASCII码,GBK码是对ASCII码的一种扩展,GBK全名为《汉字内码扩展规范》,专门针对汉字的编码。

2.python里的字符串编码

编码函数:encode,字面意思就是编码;

解码函数:decode

重点:python里字符串的两种type类型,一种为Unicode,一种为str;Unicode可以理解为字符串序列,长度len为字符个数;str可以理解为字节串序列,长度len为所占用的字节数。

2.1 全英文字符串

对Python里出现的定义的字符串语句,如name="xiaoming"用type函数查看类型为str,这里编码方式为utf-8;可以使用编解码函数转换为gbk编码,占用字节数都一样,而且随意使用编解码函数与编解码方式不会报错。有兴趣的可以自己试一下。

2.2 汉字字符串(或者含有汉字的英文字符串)

代码开头需要#coding=utf-8

若定义name="小明",字符串类型仍然为str,编码方式为utf-8,字符串长度为6,其实即为占用字节数为6:

a.想要转换为unicode,需经过utf-8解码decode,转换以后长度为2,2个字符;

b.不能对其进行任何方式的编码encode;

c.想转换成gbk,先需要转成unicode,然后进行gbk方式编码encode,此时字符串长度为4,占用的字节数。

d.转换成gbk码,可以以其方式进行解码decode为Unicode;

e.utf-8的编码序列和gbk的编码序列不能相互直接以任一种方式编解码。

下图说明:

python2.x编码的一些理解

总之,对于有汉字的字符串,unicode转str(utf-8或gbk),就是相当于用字节来表示字符,就是属于编码encode,反之为解码decode。