在一些网页中,非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,如果需要转换十六进制的编码,需要进行相应的修改。