我正在获取一个网页(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")
它给出了以下错误:
^{pr2}$如果我绕过.decode步骤并使用lxml库进行一些分析,则在将已解析的标题保存到数据库时将引发错误:
'utf8' codec can't decode bytes in position 45-50: unsupported Unicode code range
我的数据库有字符集utf8和排序规则utf general ci
我的设置:
Django
Python 2.4.3
MySQL5.0.22
MySQL python 1.2.1
mod峎python 3.2.8
autoweek.com似乎对它自己的编码感到困惑。它声明了冲突的字符集定义:
后来。。。在
^{pr2}$iso-8859-1是正确的,因为它是通过
.info()
方法从web服务器返回的头中返回的(它实际上是解码的),但这表明您不一定依赖于web页面中的内容类型声明。你应该遵循拉维尼奥描述的方法。在如果
webpage
声明了编码iso-8859-1
,你就不能做webpage.decode("iso-8859-1")
?在此时,
webpage
将为您的应用程序解码。当它被写入数据库时,那里的映射应该处理char-to-utf8编码。在为了得到正确的编码,要么告诉web服务器你只接受UTF-8,然后你就会(希望)得到这样的结果,因为几乎每个人都会读UTF-8(或者你可以用ISO-8859-1来尝试);要么使用.info检查返回流的编码名称。在
有关详细信息,请参见urllib2 - The Missing Manual和Quick reference to HTTP headers。在
相关问题 更多 >
编程相关推荐