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

7
我有一个以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个回答

10
u''语法仅适用于字符串字面量,例如在源代码中定义值。使用该语法会创建一个unicode对象,但这不是创建这种对象的唯一方法。
您不能通过在字节字符串前面添加u来创建unicode值。但如果您使用正确的编码调用了str.decode(),则可以获得unicode值。反之,您可以使用unicode.encode()unicode对象编码为字节字符串。
请注意,当显示unicode对象时,Python使用Unicode字符串字面量语法(因此是u'...')来表示它,以便于调试。您可以将表示粘贴回Python解释器中,并获得具有相同值的对象。
您的a值是使用字节字符串字面量定义的,因此您只需要对其进行解码:
a = 'Entre\xc3\xa9'
b = a.decode('utf8')

你的第一个示例创建了一个乱码字符串,它包含Latin-1代码点,实际上表示UTF-8字节。这就是为什么你必须先编码为Latin-1(以撤消乱码),然后再解码为UTF-8。
你可能想要阅读有关Python和Unicode的Unicode HOWTO。其他感兴趣的文章包括:

非常感谢!现在,如果我输入:b 到Python解释器中,我会得到:u'Entre\xe9' 如果我输入:print b 我会得到:Entreé是否有可能有一个字符串变量,可以自动返回Entreé而不使用print语句? - Tminer
@user3804963:我认为你混淆了表示(u'Entre\xe9')和值。 print 显示给你的是值(编码为您的终端),而您的 Python 控制台显示给你的是表示(用于调试)。没有发生任何值的更改。Python 正在向您显示一个可以复制并粘贴到源代码中而无需声明源代码编码超出默认 ASCII 的值,因此对于 U+00E9 Unicode 代码点显示了转义序列(\xe9)。这是正常的 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接