抓取编码为iso88591而不是utf8的网站:如何在数据库中存储正确的unicode?

2024-05-19 10:23:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我把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来导航页面,googleappengine的urlphetch用于发出请求,但是我需要的是理解在数据库中存储一个字符串的正确方法是什么,它通过将字符串编码为'来修复{}。在


Tags: 字符串debug数据库http编码字节htmltype
1条回答
网友
1楼 · 发布于 2024-05-19 10:23:59

I am using BeautifulSoup to navigate the page, Google App Engine's urlfetch to make requests

您是否正在将Content-TypeHTTP头中的编码输入BeautifulSoup?在

如果一个HTML页面同时有一个Content-Type头和一个meta标记,那么这个头应该是“win”的,所以如果您只使用meta标记,那么可能会得到错误的编码。在

否则,您可以将固定的编码'utf-8'输入Beautiful,或者单独地修改每个字符串。在

烦人的注意:它实际上不是ISO-8859-1。当web页面称为ISO-8859-1时,浏览器实际上将其视为Windows代码页1252,与8859-1相似,但不相同。似乎表示cp1252,因为它在8859-1中不存在。在

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

如果内容在同一页面上使用一些UTF-8和一些cp1252编码不一致(通常是由于数据库内容处理不好),这将是恢复它的唯一方法,即捕获UnicodeError并在不进行代码转换时返回原始字符串。在

相关问题 更多 >

    热门问题