在Python中将UTF-8转换为字符串文字

时间:2014-07-04 10:05:41

标签: python string utf-8 literals

我有一个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é

1 个答案:

答案 0 :(得分:8)

u''语法仅适用于字符串文字,例如在源代码中定义值。使用语法会导致创建unicode对象,但这不是创建此类对象的唯一方法。

您不能通过在其前面添加unicode来从字节字符串中创建u值。但是,如果您使用正确的编码调用str.decode(),则会获得unicode值。反之亦然,您可以 unicode个对象编码为unicode.encode()的字节字符串。

请注意,在显示unicode对象时,Python 再次使用Unicode字符串文字语法(因此u'...')表示,以简化调试。您可以将表示粘贴回Python解释器并获取具有相同值的对象。

您的a值是使用字节字符串文字定义的,因此您只需要解码:

a = 'Entre\xc3\xa9'
b = a.decode('utf8')

您的第一个示例创建了一个Mojibake,一个包含Latin-1代码点的Unicode字符串,实际上代表UTF-8字节。这就是为什么你必须首先编码为Latin-1(撤消Mojibake),然后从UTF-8解码。

您可能希望在Unicode HOWTO中阅读Python和Unicode。其他感兴趣的文章是: