1

HTTP応答で文字エンコードを検出する必要があります。<meta http-equiv='content-type'>これを行うには、ヘッダーを確認します。それがcontent-typeヘッダーに設定されていない場合は、応答を確認して" "ヘッダーを探す必要があります。次のような外観と動作をする関数を記述できるようにしたいと思います。

response = urllib2.urlopen("http://www.example.com/")
encoding = detect_html_encoding(response)
...
page_text = response.read()

ただし、「detect_html_encoding」メソッドでresponse.read()を実行すると、関数の呼び出し後の後続のresponse.read()は失敗します。

応答を確認したり、読んだ後に巻き戻したりする簡単な方法はありますか?

4

2 に答える 2

4
def detectit(response):
   # try headers &c, then, worst case...:
   content = response.read()
   response.read = lambda: content
   # now detect based on content

もちろん、トリックはresponse.read()、必要に応じて同じものを再び返すようにすることです...そのためlambda、必要に応じて、つまり、コンテンツを抽出する必要がある場合は、同じコンテンツを再度抽出できるようにします(そして何度も何度も、...;-)。

于 2009-08-21T02:05:26.540 に答える
0
  1. HTTPヘッダー(ドキュメント自体ではない)にある場合はresponse.info()、エンコーディングの検出に使用できます
  2. HTMLを解析する場合は、応答データを保存します。

    page_text = response.read()
    encoding = detect_html_encoding(response, page_text)
    
于 2009-08-20T20:30:44.707 に答える