我正在获取一个网页(http://autoweek.com),并试图处理它,但得到编码错误。Autoweek声明"iso-8859-1“编码,并有单词"Nürburgring”(u带元音)
我有:
# -*- encoding: utf-8 -*-
import urllib
webpage = urllib.urlopen(feed.crawl_url).read()
webpage.decode("utf-8")它给出了以下错误:
'utf8' codec can't decode bytes in position 7768-7773: unsupported Unicode code range"如果我绕过.decode步骤并使用lxml库进行一些解析,则在将解析后的标题保存到数据库时会引发错误:
'utf8' codec can't decode bytes in position 45-50: unsupported Unicode code range我的数据库有字符集utf8和排序规则utf-general-ci
我的设置:
姜戈
Python 2.4.3
MySQL 5.0.22
MySQL-python 1.2.1
mod_python 3.2.8
发布于 2009-07-09 06:50:44
autoweek.com似乎对自己的编码感到困惑。它声明了冲突的字符集定义:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 后来..。
<meta charset=iso-8859-1"/>.iso-8859-1是正确的,因为它是在web服务器和.info()方法的报头中返回的(它实际上是解码的),但这表明您不一定要依赖web页面中的Content-Type声明。你应该遵循lavinio所描述的方法。
发布于 2009-07-09 03:48:03
如果webpage声明了iso-8859-1编码,你不能只做webpage.decode("iso-8859-1")吗
在这一点上,为你的应用程序解码了webpage。当它被写入数据库时,那里的映射应该处理char-to-utf8编码。
要获得正确的编码,要么告诉get服务器你只接受,比如说UTF-8,然后你就会(希望)得到它,因为几乎每个人都阅读UTF-8 (或者你可以尝试使用ISO-8859-1);或者使用.info来检查返回的流的编码名称。
详细信息请参见urllib2 - The Missing Manual和Quick reference to HTTP headers。
https://stackoverflow.com/questions/1101715
复制相似问题