0

Web ページ ( 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 があります

私の設定:
Django
Python 2.4.3
MySQL 5.0.22
MySQL-python 1.2.1
mod_python 3.2.8

4

2 に答える 2

3

webpageがencoding を宣言している場合、iso-8859-1あなたはできませんwebpage.decode("iso-8859-1")か?

その時点で、webpageアプリ用にデコードされます。データベースに書き込まれるとき、そこでのマッピングは char-to-utf8 エンコーディングを処理する必要があります。

正しいエンコーディングを取得するには、ウェブサーバーに、たとえば UTF-8 のみを受け入れることを伝えます。そうすれば、(願わくば) 常にそれが取得されます。ほぼすべての人が UTF-8 を読み取るためです (または、ISO- 8859-1); または .info を使用して、返されたストリームのエンコーディング名を調べます。

詳細については、urllib2 - The Missing ManualおよびHTTP ヘッダーのクイック リファレンスを参照してください。

于 2009-07-09T03:48:02.563 に答える
0

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-09T06:50:44.210 に答える