2011-10-01 11 views
6

このラインUnicodeDecodeErrorをどのようにエンコード( 'ascii'、 'ignore')することができますか?

data = get_url_contents(r[0]).encode('ascii', 'ignore') 

は、このエラー

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

なぜを生成しますか?私は 'ignore'を使用しているので、出力を文字列変数に値を保存するときにデコードエラーが発生しないようにする必要があると仮定しました。

+0

問題が_decoding_である、ではありません_エンコーディング_。彼らは同じではありません。 – agf

+0

Wtは 'get_url_contents'を実行しますか?これは、 'encode'ではなく、その関数で例外が発生したようです。 –

+0

@ Trindaz、0xc3はASCII文字ではありません。 –

答えて

3

Python 2が奇抜であるため、バイト文字列(つまり既にエンコードされているテキスト)にencodeを呼び出すことができます。この場合、最初にasciiでデコードすることによってUnicodeオブジェクトに変換しようとします。

get_url_contents(r[0]).decode('ascii').encode('ascii', 'ignore') 

のPython 3では、バイト列がencodeメソッドを持っていないので、同じ問題は、単にはAttributeErrorを引き起こす:get_url_contentsは、バイト文字列を返しているのであれば、あなたのラインが効果的にこれを行います。

(もちろん、私はこれが問題であることを知らない - 。それはget_url_contents機能に関連している可能性がしかし、私は上記きたことは私の最高の推測です)