2014-10-26 109 views
0

我使用Readability Parser API从网页中提取内容。它是确定当网页是在拉丁字符集,但是当我提取西里尔文章,它具有下列结束:Python - 将unicode十六进制转换为字符串

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

有趣的下面是一个网页的标题是正确提取在西里尔文,但不是内容。我的尝试是做到以下几点,因为它在这个SO answer建议:

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

,但没有奏效。你能告诉我在保存到数据库之前是否有办法转换这个字符串?

请让我知道,如果我的问题的标题正确解释我需要什么。谢谢。

回答

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:

+0

非常感谢你,我真的很感激它!我只会补充说h.parser.unescape已被弃用(Python 3.5),所以我使用了html.unescape()。 – nickbusted 2014-10-27 01:19:58

相关问题