2009-08-20 3 views
1

HTTP応答で文字エンコーディングを検出する必要があります。これを行うには、ヘッダーを見て、コンテンツタイプヘッダーに設定されていない場合は、応答を覗いて "<meta http-equiv='content-type'>"ヘッダーを探します。私が見て、このような何かを働く関数を記述できるようにしたいと思います:urllib2レスポンスのデータを覗くことはできますか?

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

しかし、私は私の「detect_html_encoding」方法、そしてsubseuqentのresponse.read(中response.read()を行う場合)私の関数の呼び出し後に失敗します。

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

答えて

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

response.read()は、必要に応じて同じことを再度返すことを確実にしています。その理由は、012必要であればに、つまり既にコンテンツを抽出する必要がある場合は、同じコンテンツを再度抽出することができます。

0
  1. それがHTTPヘッダ(ないドキュメント自体)にいた場合は、HTMLを解析したい場合は、エンコーディング
  2. を検出するために、response.info()を使用することができ、レスポンスデータを保存します。

    page_text = response.read() 
    encoding = detect_html_encoding(response, page_text) 
    
+0

(1)ヘッダーに、(2)文書に、(3)不在(この場合、文書内の文字に基づいて検出するためにチャードセットを使用する必要があります)。 私は明らかにテキストを先に読み出すことができますが、私がしたいと思うのは基本的にこのタイプのアプローチを避けることができます。 – John

関連する問題