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

Tmi*_*ner 6 python string utf-8 literals

我有一个UTF-8格式的字符串,但不太确定如何将此字符串转换为相应的字符文字.例如,我有字符串:

我的字符串是: 'Entre\xc3\xa9'

例一:

这段代码:

u'Entre\xc3\xa9'.encode('latin-1').decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

返回结果: u'Entre\xe9'

如果我继续打印这个:

print u'Entre\xe9'
Run Code Online (Sandbox Code Playgroud)

我得到了结果: Entreé

这很棒,接近我的需要.问题是,我不能让'Entre\xc3\xa9'成为一个变量并将其传递给步骤,因为现在它已经破坏了.让这个工作的任何提示?

例:

a = 'Entre\xc3\xa9'
b = 'u'+ a.encode('latin-1').decode('utf-8')
c= 'u'+ b
Run Code Online (Sandbox Code Playgroud)

我希望"c"的结果是:

Entreé
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

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')
Run Code Online (Sandbox Code Playgroud)

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

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