您没有unicode对象,但是具有UTF-8编码文本的字节字符串。印制例如字节串到你的终端 可能 ,如果你的终端被配置为处理UTF-8文本。
当转换一个列表串,该列表的内容被示出为 表示 ;repr()
函数的结果。字符串对象的表示形式对可打印ASCII范围以外的任何字节使用转义码;\n
例如,换行符被替换。您的UTF-8字节由\xhh
转义序列表示。
如果您使用Unicode对象,表示将使用\xhh
逃逸 仍 ,但在Latin-1的范围内(外ASCII)仅Unicode代码点(其余都显示与\uhhhh
和\Uhhhhhhhh
逃逸取决于它们的代码点); 在打印时,Python会自动将这些值编码为适合终端的正确编码:
>>> u'université'
u'universit\xe9'
>>> len(u'université')
10
>>> print u'université'
université
将此与字节字符串进行比较:
>>> 'université'
'universit\xc3\xa9'
>>> len('université')
11
>>> 'université'.decode('utf8')
u'universit\xe9'
>>> print 'université'
université
注意,长度反映了é
代码点也被编码为两个字节。顺便说一句,是我的终端\xc3\xa9
在将é
字符粘贴到Python会话中时向Python提供了字节,因为它已配置为使用UTF-8,并且当我定义u'..'
Unicode对象文字时,Python已检测到并解码了字节。
我强烈建议您阅读以下文章,以了解Python如何处理Unicode,以及Unicode文本和编码的字节字符串之间的区别是什么:
每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)作者:Joel Spolsky
Ned Batchelder的实用Unicode