Python - 将unicode hex转换为string

时间:2014-10-26 23:15:31

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

我正在使用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')

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

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

1 个答案:

答案 0 :(得分:2)

单向(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>

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

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

根据评论,它最终在Python 3.4中记录(并移动):