我读取的网页(http://autoweek.com),并试图进程,但获取的编码错误。汽车周刊宣布"iso-8859-1"的编码,并有个词"纽伯格林"(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"

如果我旁路。解码的步骤,并做一些解析与lxml库,它提出了一个错误的时候我的节分析的标题数据库:

'utf8' codec can't decode bytes in position 45-50: unsupported Unicode code range

我的数据库已经字符集utf8和排序规则utf-general-ci

我设置:
Django
蟒蛇2.4.3
MySQL5.0.22
MySQL-蟒蛇1.2.1
mod_python3.2.8

有帮助吗?

解决方案

autoweek.com 似乎搞不清它自己的编码。它声明冲突的字符集定义:

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

和后...

<meta charset=iso-8859-1"/>.

ISO-8859-1是正确的,因为这是在从Web服务器的报头和由.info()方法返回(它实际上解码),但是这证明你不一定能依靠的Content-Type声明在网页。则应该按照lavinio描述的方法。

其他提示

如果的 webpage 声明的编码 iso-8859-1, 你就不能做 webpage.decode("iso-8859-1")?

在这一点上, webpage 被解码。当它被写入数据库,映射应该处理char到utf8编码。

得到正确的编码,要么告诉webserver,你只接受,说,UTF-8然后你就会(希望)总能得到,因为只是关于每个人都读UTF-8(或者你可以尝试用ISO-8859-1);或使用。信息以检查了编码名流返回。

看看 urllib2-缺少的手册快速参考HTTP头 对于细节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top