Python - 将unicode十六进制转换为字符串
我正在使用 Readability Parser API 从网页中提取内容。当网页使用拉丁字符时,一切正常,但当我提取西里尔字母的文章时,结果却是这样的:
<div>Ввоскресень</div>...etc
有趣的是,网页的标题在西里尔字母中提取得很正确,但内容却不行。我尝试按照这个 SO答案 中的建议去做:
content = unicodedata.normalize('NFKD', content).encode('ascii','ignore')
但结果并没有成功。你能告诉我有没有办法在保存到数据库之前转换这个字符串吗?
如果我的问题标题能准确表达我的需求,请告诉我。谢谢。
1 个回答
2
一种方法(Python 3.3):
>>> s='<div>Ввоскресень</div>'
>>> import html.parser
>>> h=html.parser.HTMLParser()
>>> h.unescape(s)
'<div>Ввоскресень</div>'
Python 2.7:
>>> s='<div>Ввоскресень</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中终于有了文档说明(并且位置也变了):