刮网站,其编码是ISO-8859-1,而不是UTF-8:我怎么保存我的数据库中正确的Unicode?

2019-10-16 16:26发布

我想刮使用Python一个网站,是充满了可怕的问题,一个是在顶部的错误编码:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

这是错误的,因为页面是完全一样出现以下内容:

Nell’ambito

代替

Nell'ambito (请注意’替换'

如果我理解正确的话,这种情况正在发生,因为UTF-8字节(可能是数据库编码)被解释为ISO-8859-1字节(由字符集的meta标签强制)。 我发现这个链接一些初步的解释http://www.i18nqa.com/debug/utf8-debug.html

我使用BeautifulSoup来浏览网页,谷歌App Engine的网址抓取提出要求,但我需要的是了解什么是我的数据库来存储固定字符串正确的方法’通过编码字符串'

Answer 1:

我使用BeautifulSoup来浏览网页,谷歌App Engine的网址抓取提出要求

你喂养从编码Content-Type HTTP头到BeautifulSoup?

如果HTML页面既具有Content-Type头和meta标签,标题应该“双赢”,所以如果你只考虑meta标签可能会得到错误的编码。

否则,你既可以养活固定编码'utf-8'秀美,或indvidually修复了每个字符串。

恼人的注意:它实际上不是ISO-8859-1。 当网页说,ISO-8859-1,浏览器实际上把它意味着Windows代码页1252,它类似于8859,但不一样的。 该似乎表明CP1252,因为它没有出现在8859。

u'Nell’ambito'.encode('cp1252').decode('utf-8')

如果内容与某些UTF-8和相同的页面(通常是由于不良的数据库内容处理)在某些CP1252编码不一致,这将是恢复它的唯一途径,抓住UnicodeError并返回原来的字符串时,它不会转码。



文章来源: Scraping a website whose encoding is iso-8859-1 instead of utf-8: how do I store the correct unicode in my database?