6

この行

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)

なんで?「無視」を使用しているため、出力を値に文字列変数に保存するときにデコードエラーが発生することは不可能であると想定しました。

4

1 に答える 1

3

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

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

Python 3 では、バイト文字列にはencodeメソッドがないため、同じ問題が発生すると AttributeError が発生するだけです。

(もちろん、これが問題であることはわかりませんget_url_contents。関数に関連している可能性があります。しかし、上で説明したことは私の最善の推測です)

于 2011-10-02T00:35:13.490 に答える