我想使用 Python 抓取一个充满可怕问题的网站,其中一个是顶部编码错误:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
这是错误的,因为该页面充满了如下事件:
Nell'ambito
代替
Nell'ambito(请注意 â 替换了 ')
如果我理解正确,这是因为 utf-8 字节(可能是数据库编码)被解释为 iso-8859-1 字节(由元标记中的字符集强制执行)。 我在这个链接 http://www.i18nqa.com/debug/utf8-debug.html 找到了一些初步的解释
我正在使用 BeautifulSoup 来导航页面,使用 Google App Engine 的 urlfetch 来发出请求,但是我只需要了解在我的数据库中存储修复 ' 的字符串的正确方法是什么> 通过将字符串编码为 '。
请您参考如下方法:
I am using BeautifulSoup to navigate the page, Google App Engine's urlfetch to make requests
您是否将来自 Content-Type HTTP header 的编码提供给 BeautifulSoup?
如果 HTML 页面同时具有 Content-Type header 和元标记,则 header 应该“获胜”,因此如果您只使用元标记,则可能会得到错误的编码。
否则,您可以将固定编码 'utf-8' 提供给 Beautiful,或者单独修复每个字符串。
烦人的注意事项:它实际上不是 ISO-8859-1。当网页说 ISO-8859-1 时,浏览器实际上将其理解为 Windows 代码页 1252,它与 8859-1 相似但不相同。 € 似乎表示 cp1252,因为它不存在于 8859-1 中。
u'Nell’ambito'.encode('cp1252').decode('utf-8')
如果内容的编码与同一页面上的某些 UTF-8 和某些 cp1252 不一致(通常是由于数据库内容处理不当),这将是恢复它的唯一方法,捕获 UnicodeError并在无法转码时返回原始字符串。
