当前位置

解码 HTML 中的 unicode entity

中午 zzh 发来一个问题,如何对抓下来的网页中的 unicode 字符串,诸如北京市一二八中学
进行解码?

首先想到的是最熟的 libxml2/HTMLParser。简单试了试 xmllint,无解;又大致看了看源代码,貌似没有专门处理的部分。

再转到 Python 的 BeautifulSoup。看了看文档,也貌似无解。

最后只好 google 之,发现 php 的 html_entity_decode 是一个现成的函数。赶快推荐给 zzh,发现他已经自己动手写了一个解析函数了,汗....

最后要说的是,在 google 过程中,发现 Perl 似乎也有现成模块来做这个工作,不过偶不会 Perl,没有尝试。另外就是发现一个叫李卫公的 blogger 在 Python 上也写了一个简单的程序来解码,看起来是一个正则表达式牛人,推荐一下。

Topic: 

评论

去看www.luanxiang.org

李卫公翻译了《master regexpress 3ed》

记得去买一本捧场:D

>>> from BeautifulSoup import BeautifulStoneSoup
>>> print BeautifulStoneSoup("""春天里
光明""",convertEntities=BeautifulStoneSoup.HTML_ENTITIES).contents[0]

春天里
光明

另一种做法是:
import re
def decode(string):
return re.sub('&#[0-9]{5};', lambda x: unichr(int(x.group(0)[2:-1])),re.sub(' ', ' ', string))