Python编码问题总结
继上一篇文章字符集和编码详解总结了常见字符编码后,这篇文章会对python中常见的编码问题进行分析和总结。由于python3.x版本和python2.x版本在字符编码方面有很大差异,所以本文都是以Python2.7.5来分析2.x版本中的字符编码问题。
1.Python编码基础
1.1 str和unicode
python中有两种数据模型来支持字符串这种数据类型,str和unicode,它们的基类都是basestring。比如s = "中文"
就是str类型的字符串,而u=u"中文"
就是一个unicode类型的字符串。unicode是由str类型的字符串解码后得到,unicode也可以编码成str类型。即
str --> decode -->unicode
unicode --> encode --> str
严格来说,str也许应该叫做字节串,因为对于UTF-8编码的str类型"中文",使用len()函数得到的结果是6,因为UTF-8编码的str类型<“中文”
实际是"\xe4\xb8\xad\xe6\x96\x87"
。而对于unicode类型u“中文”(实际是u"\u4e2d\u6587"
),使用len()函数得到结果是2.