Unicode问题Djangopythonurlibmysql

2024-10-03 04:40:00 发布

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

我正在获取一个网页(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


Tags: com数据库http声明网页编码错误iso
2条回答

autoweek.com似乎对它自己的编码感到困惑。它声明了冲突的字符集定义:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

后来。。。在

^{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 ManualQuick reference to HTTP headers。在

相关问题 更多 >