Python BeautifulSoup解码HTML实体

问题描述:

file_txt = urllib.request.urlopen("ftp://ftp.sec.gov/edgar/data/1220985/0000930413-12-003922.txt") 
file = file_txt.read().decode('cp1252') 
soup = BeautifulSoup(file) 
print(soup.prettify()) 
#UnicodeEncodeError: 'charmap' codec can't encode character '\x92' in position 11900: character maps to <undefined> 

我检查了txt文件。当它在浏览器中显示时,\x92实际上显示为'的HTML实体&#146。我不知道为什么在使用与我的浏览器相同的编码方案(cp1252)对其进行解码之后出现错误。Python BeautifulSoup解码HTML实体

通常BeautifulSoup擅长检测网页所使用的编码,如果它可用,则通过使用chardet库来实现。所以我建议你安装chardet包,并让BeautifulSoup找出编码。

pip install chardet (or easy_install chardet) 

希望这会对您有所帮助。

+0

感谢您的回复。我正在使用Python 3,据说它完全支持unicode。您推荐的软件包对于Python 3来说有点旧。 – zsljulius 2012-07-12 20:35:48

+0

@zsljulius:Python3有更好的Unicode支持并不意味着他具有嗅探编码的特性,即“'chardet''软件包,恕我直言。我可以问,你试过吗? – mouad 2012-07-12 21:26:34

美丽的汤姆读取文档,但是当您尝试将其打印到控制台时会出现错误。这通常表示您的控制台无法显示某个字符。 This page on the Python wiki may help.

+0

我也尝试将输出写入文件。与UnicodeError相同的问题 – zsljulius 2012-07-12 20:55:21