1

我需要检测 HTTP 响应中的字符编码。为此,我查看标头,然后如果未在内容类型标头中设置它,我必须查看响应并查找“ <meta http-equiv='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 回答