其实,这里要讨论的内容是针对 Python2 的,实际上也是 Python2 中让人头疼的编码问题,而 Python3 则好处理得多。
先来看看例子:
>>> s = "我正在学Python"
>>> s
'\xe6\x88\x91\xe6\xad\xa3\xe5\x9c\xa8\xe5\xad\xa6Python'
>>> s_u = u"我正在学Python"
>>> s_u
u'\u6211\u6b63\u5728\u5b66Python'
>>> print s
我正在学Python
>>> print s_u
我正在学Python
在 Python2 中,有两种类型的字符编码,即 str 和 unicode。而 str 是字节字符串,也就二进制数据;unicode 是文本字符串,是字节序列通过编码后的文本类型。
从上例可以看出,我们直接运行 s 或者 s_u 与用 print 打印输出是不一样的。直接运行实际上解释器是调用的 repr 方法,这样的输出表示是计算机可读的形式,也就在 Python 解释器内部是这么存储的;而用 print 输出的字符串则是人可读的,它的目的就是让人能够读懂。
那么,问题就来了,如果你得到这样的字符串:
\xe6\x88\x91\xe6\xad\xa3\xe5\x9c\xa8\xe5\xad\xa6Python
\u6211\u6b63\u5728\u5b6