Python编码问题:度数符号和其他

时间:2012-01-30 05:34:39

标签: python encoding beautifulsoup

我正在使用BeautifulSoup从网页中抓取数据。我想将网站数据与.txt文档中的文本进行比较。但是,我似乎遇到了编码问题。

网站上有“加热烤箱到400°”的文字。文字在“视图来源”中也显示如下(没有html实体。)

使用beautifulSoup阅读网站:

source = "my url".read()
....
soup = BeautifulSoup(source)    

文本文档是通过将新文本doc编码为“在没有BOM的UTF-8中编码”来创建的。然后我从网站上将“加热烤箱”复制粘贴到文本文档并保存。

文本文件读为

f = codecs.open('myfilename', encoding='utf-8')

当我比较两个字符串时,它们不相等,但我希望它们是。

要了解发生了什么:在Eclipse中,我拆分了两个文本,在调试模式下查看变量,我看到BeautifulSoup的度数符号显示为\ xc2 \ xb0。文本doc中的度数符号只显示为\ xb0。

为什么,我该如何解决?我遇到了许多特殊字符的问题所以我需要一个通用的解决方案。另外,我将把几个站点的数据复制粘贴到文本文档中。

1 个答案:

答案 0 :(得分:1)

看起来Beautiful Soup没有正确检测编码所需的东西。您可以通过将BeautifulSoup(source)替换为BeautifulSoup(source,fromEncoding ='UTF-8')来提示。有关更多选项和信息,请访问“Beautiful Soup Gives You Unicode, Dammit”。

字节'\ xc2 \ xb0'是你在Unicode代码点U + 00B0的UTF-8编码被误认为Beautiful Soup对编码的最后一次猜测时得到的,即Windows 1252。