1

文字セットが指定されていないWebページの読み取りに問題があります。ユーロ通貨などのASCII以外の文字が含まれているため、ブラウザで正常に読み取ることができます。Firefoxのページ情報で、エンコーディングが使用されていることがわかります。は「ISO-8859-1」であり、レンダリングモードは「Quirksモード」です。ただし、python-requestsはこれらの非ASCII文字を実際にデコードできず、たとえばその文字列をテキストファイルに書き込もうとするとエラーが発生します。例:

result = requests.get(url)
result.encoding = 'ISO-8859-1'
html = result.text
open('textfile.txt', 'w').write(html)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\x80'

u'\x80'が'ISO-8859-1'エンコーディングでユーロ通貨を表す必要がある場合、これは機能するはずです

print '\x80'.decode('ISO-8859-1')

しかし、私はユーロではなく、印刷できない文字を取得します。

では、そのWebページはブラウザーでどのように機能しますが、requests(urllib / 2も)はそのエンコーディングを処理できませんか?'utf-8'でも試してみましたが、同じことです。助言がありますか?

4

1 に答える 1

3

cp1252問題は、これを行うとわかるように、実際のエンコーディングが次のようになることです。

 print '\x80'.decode('cp1252')

この関連する回答は、より詳細な情報を提供します。

PHP関数iconv文字エンコード(iso-8859-1からutf-8)

これはPythonとは関係ありませんが、同じ問題であり、これが発生する理由の背景を示しています。

于 2013-02-28T23:37:56.003 に答える