该u''
语法 仅适用于字符串文字 ,例如,在源代码中定义值。使用语法unicode
可以创建对象,但这不是创建此类对象的唯一方法。
您不能通过unicode
在字节字符串u
前面添加来产生值。但是,如果您str.decode()
使用正确的编码进行调用,则会获得一个unicode
值。反之亦然,您可以使用将对象编码 unicode
为字节字符串unicode.encode()
。
请注意,在显示unicode
对象时,Python再次使用Unicode字符串文字语法(so )来 表示 它u'...'
,以简化调试。您可以将表示形式粘贴回Python解释器中,并获得具有相同值的对象。
您的a
值是使用字节字符串文字定义的,因此您只需要解码:
a = 'Entre\xc3\xa9'
b = a.decode('utf8')
您的第一个示例创建了Mojibake,这是一个Unicode字符串,其中包含实际上代表UTF-8字节的Latin-1代码点。这就是为什么您必须先编码为Latin-1(以撤消Mojibake),然后再从UTF-8进行解码的原因。
您可能想在UnicodeHOWTO中阅读有关Python和Unicode的内容。其他感兴趣的文章是:
每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)作者:Joel Spolsky
Ned Batchelder的实用Unicode