【问题标题】:How do convert unicode escape sequences to unicode characters in a python string如何将 unicode 转义序列转换为 python 字符串中的 unicode 字符
【发布时间】:2010-11-02 16:11:10
【问题描述】:

当我尝试使用“unicode(head.contents[3])”获取标签的内容时,我得到的输出类似于:“Christensen Sk\xf6ld”。我希望转义序列作为字符串返回。在python中怎么做?

【问题讨论】:

    标签: python unicode python-2.x


    【解决方案1】:

    假设 Python 将名称视为普通字符串,您首先必须将其解码为 un​​icode:

    >>> name
    'Christensen Sk\xf6ld'
    >>> unicode(name, 'latin-1')
    u'Christensen Sk\xf6ld'
    

    实现此目的的另一种方法:

    >>> name.decode('latin-1')
    u'Christensen Sk\xf6ld'
    

    注意字符串前面的“u”,表示它是未编码的。如果你打印这个,重音字母会正确显示:

    >>> print name.decode('latin-1')
    Christensen Sköld
    

    顺便说一句:必要时,您可以使用 de "encode" 方法将 unicode 转换为 e.g.一个 UTF-8 字符串:

    >>> name.decode('latin-1').encode('utf-8')
    'Christensen Sk\xc3\xb6ld'
    

    【讨论】:

    • 非常感谢老兄。因此,如果我需要将其保存到数据库中,我可以对其进行解码并保存到数据库中,对吗?
    • 不,请再次阅读 Mark 的示例。在将数据从任何内容(latin1、cp1252 等)解码为 un​​icode 后,您需要使用 (1) 您的数据库支持和 (2) 保留所有 unicode 字符的编码对您的 unicode 字符串进行编码......通常是 UTF-8 .
    【解决方案2】:

    我怀疑它确实工作正常。默认情况下,Python 以 ASCII 编码显示字符串,因为并非所有终端都支持 unicode。但是,如果您实际打印字符串,它应该可以工作。请参阅以下示例:

    >>> u'\xcfa'
    u'\xcfa'
    >>> print u'\xcfa'
    Ïa
    

    【讨论】:

    • 如果是终端的问题,如果我将它保存到数据库(MySQL),它会正确显示吗??
    • 是的,会的,但您必须注意数据库的排序规则/字符集编码。
    【解决方案3】:

    给定带有 Unicode 转义符 b"\N{SNOWMAN}" 的字节字符串,b"\N{SNOWMAN}".decode('unicode-escape) 将生成预期的 Unicode 字符串 u'\u2603'

    【讨论】:

    • 虽然不完全是问题的答案,但当你得到像'\u00e9'这样编码的字符串时,这是正确的答案
    猜你喜欢
    • 2010-09-16
    • 2020-03-15
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多