Python编码问题:度数符号及其他
我正在使用BeautifulSoup从一个网页上抓取数据。我想把网站上的数据和一个.txt文档里的文本进行比较。但是,我似乎遇到了编码问题。
这个网站上有一句话是“把烤箱预热到400°”。在“查看源代码”时,这段文字也显示成这样(没有HTML实体)。
我用BeautifulSoup读取这个网站:
source = "my url".read()
....
soup = BeautifulSoup(source)
这个文本文件是通过创建一个新的文本文档,并选择“以UTF-8编码(无BOM)”的方式生成的。我然后把网站上的“把烤箱预热到400°”复制粘贴到这个文本文档里并保存。
这个文本文件读取后是:
f = codecs.open('myfilename', encoding='utf-8')
当我比较这两个字符串时,它们并不相等,但我希望它们能够相等。
为了弄清楚发生了什么:在Eclipse中,我把这两段文本分开,并在调试模式下查看变量时,我发现从BeautifulSoup得到的度数符号显示为\xc2 \xb0,而文本文档中的度数符号只显示为\xb0。
这是为什么呢?我该如何解决这个问题?我在处理很多特殊字符时都遇到这个问题,所以我需要一个通用的解决方案。此外,我还会从多个网站复制粘贴数据到这个文本文档中。
1 个回答
1
看起来Beautiful Soup在正确识别编码时遇到了问题。你可以通过把BeautifulSoup(source)替换成BeautifulSoup(source, fromEncoding='UTF-8')来给它一些提示。更多的选项和信息可以在网上找到,地址是"Beautiful Soup Gives You Unicode, Dammit"。
字节'\xc2\xb0'是当UTF-8编码的Unicode代码点U+00B0被错误地当作Beautiful Soup最后的编码猜测(也就是Windows 1252)时得到的结果。