【问题标题】:Python - Convert unicode hex to stringPython - 将 unicode 十六进制转换为字符串
【发布时间】:2014-12-22 03:07:30
【问题描述】:

我正在使用Readability Parser API 从网页中提取内容。网页是拉丁字符集的时候没问题,但是当我用西里尔文提取文章时,它会出现以下内容:

<div>&#x412;&#x432;&#x43E;&#x441;&#x43A;&#x440;&#x435;&#x441;&#x435;&#x43D;&#x44C;</div>...etc

这里有趣的是,网页的标题在西里尔语中被正确提取,但内容却没有。我的尝试是按照SO answer 中的建议执行以下操作:

content = unicodedata.normalize('NFKD', content).encode('ascii','ignore')

但它不起作用。你能告诉我是否有办法在保存到数据库之前转换这个字符串?

如果我的问题标题正确解释了我的需求,请告诉我。谢谢。

【问题讨论】:

    标签: python django unicode utf-8 python-unicode


    【解决方案1】:

    一种方式(Python 3.3):

    >>> s='<div>&#x412;&#x432;&#x43E;&#x441;&#x43A;&#x440;&#x435;&#x441;&#x435;&#x43D;&#x44C;</div>'
    >>> import html.parser
    >>> h=html.parser.HTMLParser()
    >>> h.unescape(s)
    '<div>Ввоскресень</div>'
    

    Python 2.7:

    >>> s='<div>&#x412;&#x432;&#x43E;&#x441;&#x43A;&#x440;&#x435;&#x441;&#x435;&#x43D;&#x44C;</div>'
    >>> import HTMLParser
    >>> h=HTMLParser.HTMLParser()
    >>> print(h.unescape(s))
    <div>Ввоскресень</div>
    

    附:我去寻找文档链接,看起来unescape 没有记录。这是一种不使用未记录 API 的方法:

    >>> re.sub(r'&#x(.*?);',lambda x: chr(int(x.group(1),16)),s)
    '<div>Ввоскресень</div>'
    

    根据评论,它看起来最终在 Python 3.4 中记录(和移动):

    【讨论】:

    • 非常感谢,非常感谢!我只想补充一点,不推荐使用 h.parser.unescape(Python 3.5),所以我使用了 html.unescape()。
    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2016-05-10
    • 2020-06-20
    • 2018-01-31
    • 2018-01-22
    相关资源
    最近更新 更多