python2.*中知识点

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

代码中字符串的默认编码与代码文件本身的编码一致。

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

代码中字符串的默认编码与代码文件本身的编码一致。
 

 

 

当路径中有中文时,需要先解码成无编码的unicode类型

当需要输出时,需要转化成对应的编码输出。

对于print函数来说,输出单个元素是会转化成utf-8编码来输出,但对于列表输出还是会直接保留unicode字符集来输出。如下:

python2.*中知识点

 

关于编码与解码函数

decode解码函数,如:

>>> '张俊'.decode('utf-8') #python2 可以正常解码,返回的字符串类是无编码的unicode类型

encode编码函数,如:

 

>>> '张俊' #python2 会自动将字符串转换为合适编码的字节字符串

'\xe5\xbc\xa0\xe4\xbf\x8a' #自动转换为utf-8编码的字节字符串

 

>>>'张俊'.encode('utf-8') #python2 已经自动将其转化为utf-8类型编码,因此再次编码(python2会将该字符串当作用ascii或unicode编码过)会出现错误。

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

 

>>> '张俊'.decode('utf-8') #python2 可以正常解码,返回的字符串类是无编码的unicode类型

u'\u5f20\u4fca'

 

>>> b'张俊' # ‘张俊' 已被python2转换为utf-8编码,因此已为字节字符串

'\xe5\xbc\xa0\xe4\xbf\x8a'

 

参考博客: