2012-02-02 21 views
0

私はbeautifulSoupを使ってISO-8859-1エンコーディングのページを擦っていますが、ちょっとした問題にぶち当たっています。ページを掻き取ろうとするとエンコードの問題が発生する

私は読み込みラインがあります。

logging.info("Processing [%s]" % (link)) 

を変数linkがbeautifulsoupから掻き取り値のいずれかですが。これはUnicode文字列で、print linkと入力すると印刷できます。それはそれが掻き取った正確な方法コンソール上に表示されますが、上記の行は、このエラーがスローされます。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: ordinal not in range(128) 

今はUnicodeの上に読んだけど、それを印刷することができる理由を私は理解できませんそれを記録することはできません。

booba-concert-à-bercy 

任意のアイデア私はこれをいじくるよどこに:

問題の文字列は、このですか?

ありがとうございます。

答えて

2

私は私のPython/Lib/site-packagesディレクトリにsitecustomize.pyというファイルを追加することによってこの問題を解決するために管理。このファイルには、import syssys.setdefaultencoding('utf-8')という2つの行が含まれています。

それ以前のデフォルトのエンコードはasciiであり、したがって問題です。デフォルトのエンコーディング、つまりutf-8を使用しているため、リンク変数に明示的なエンコーディングを指定する必要はありません。もちろん

、私は同じエンコーディングで私の端末まで、適切に文字を参照してくださいことは決してないだろうが、それは私のコードを壊すことはありません。

3

loggingは好きではないunicode;バイトを渡します。

logging.info("Processing [%s]" % (link.encode('utf-8'))) 
+0

こんにちはイグナシオ。それは私にとってはうまくいかなかった。私はまだ同じエラーが発生します。私の環境についてこれを引き起こす可能性のある他の設定がありますか?ありがとう。 –

+0

Windowsのターミナルエンコーディングと思われる 'cp850'に文字列をエンコードするとうまくいきますが、あなたの例のエンコーディングを' utf-8'に指定したにもかかわらず、それでもエンコーディングしようとしたのでしょうかASCIIに。 –

+1

私は 'Python/Lib/site-packages'ディレクトリに' sitecustomize.py'というファイルを追加することでこれを解決しました。このファイルには 'import sys'と' sys.setdefaultencoding( 'utf-8') 'の2行が含まれています。それ以前のデフォルトのエンコーディングは 'ascii'であり、したがって問題です。これでデフォルトのエンコーディング、つまり 'utf-8'を使用し、それをそれに変換するので、' link'変数の明示的なエンコーディングを指定する必要はありません。これは問題の良い解決策ですか?もちろん、私は、同じエンコーディングの端末まで文字を正しく見ないでしょうが、それは私のコードを壊さないでしょう。 –

関連する問題