在Python中将UTF-8转换为字符串文字
我有UTF-8格式的字符串,但不确定如何将其转换为对应的字符文字。例如我有字符串:
我的字符串是: 'Entre\xc3\xa9'
范例一:
这段代码:
u'Entre\xc3\xa9'.encode('latin-1').decode('utf-8')
返回结果: u'Entre\xe9'
如果然后我继续打印此内容:
print u'Entre\xe9'
我得到结果: Entreé
这很棒,很接近我的需求。问题是,我无法将’Entre \ xc3 \
xa9’设置为变量,并且无法通过步骤传递它,因为现在这种情况发生了。有任何技巧可以使它正常工作吗?
例:
a = 'Entre\xc3\xa9'
b = 'u'+ a.encode('latin-1').decode('utf-8')
c= 'u'+ b
我希望“ c”的结果是:
Entreé
-
该
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进行解码的原因。
您可能想在Unicode
HOWTO中阅读有关Python和Unicode的内容。其他感兴趣的文章是:-
每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)作者:Joel Spolsky
-
Ned Batchelder的实用Unicode
-