質問

ウェブページを取得しています (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

役に立ちましたか?

解決

autoweek.com にそれ自身のエンコーディングについて混乱しているようです。これは、競合文字セットの定義を宣言します:

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

と後で...

<meta charset=iso-8859-1"/>.
これは、(それは実際にデコード)は、Webサーバからと.info()方法によりヘッダに戻ったが、これはあなたが必ずしもコンテンツタイプに頼ることができないことを証明しているので、

ISO-8859-1が正しいものですWebページで宣言。あなたはlavinioにより記載された方法に従ってください。

他のヒント

もし webpage エンコーディングを宣言します iso-8859-1, 、できないのですか? webpage.decode("iso-8859-1")?

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

正しいエンコーディングを取得するには、Web サーバーに、たとえば UTF-8 のみを受け入れるように伝えます。そうすれば、ほぼすべての人が UTF-8 を読むので、(うまくいけば) 常にそのエンコーディングが得られます (あるいは、ISO-8 で試すこともできます)。 8859-1);または、.info を使用して、返されたストリームのエンコーディング名を検査します。

見る urllib2 - 失われたマニュアル そして HTTP ヘッダーのクイック リファレンス 詳細については。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top