在一些网页中,非ASCii字符是以HTML Entity的方式存储的,在这种表示方式中,每个字符(Unicode Char)以
&#
+Unicode代码+;

的方式存放。
例如,“充电器”表示为
充电器
其中,20805, 30005, 22120分别是“充” “电” “器”三个字的Unicode代码。

为了对页面进行分析,程序需要知道将这些HTML Entity转换成相应的字符,在Java语言中,我们可以利用HtmlParser中org.htmlparser.util.Translate提供的decode方法来转码(Translate class的功能非常强大)。在Python中,似乎没有现成的办法,需要我们自己实现一个转换函数,下面是一个简易的实现。

def decodeHtmlEntity(s) :
        import re
        result = s
        entityRe = ‘(&#(\\d{5});)’
        entities = re.findall(entityRe, s)
        for entity in entities :
                result = result.replace(entity[0], unichr(int(entity[1])))
        return result.encode(‘utf-8′, ‘ignore’)

实现的原理是:利用python内建的unichr函数,将Unicode代码还原为Unicode字符。
不过,这个程序还只能处理十进制的Entity,如果需要转换十六进制的编码,需要进行相应的修改。


1条评论

  1. cool

发表评论

评论也有版权!

click to change验证码