Skip to main content
 首页 » 编程设计

python之抓取编码为 iso-8859-1 而不是 utf-8 : how do I store the correct unicode in my database 的网站

2025年05月04日11jillzhang

我想使用 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并在无法转码时返回原始字符串。