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

发布于 2021-01-29 16:15:27

我有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é
关注者
0
被浏览
198
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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的内容。其他感兴趣的文章是:



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看