我需要检测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(),那么调用my函数后的subseuqent response.read()将会失败。
有没有一种简单的方法可以在阅读后查看响应和/或倒带?
答案 0 :(得分: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
分配给它,即如果我们已经需要提取内容 - 确保可以再次提取相同的内容(并再次提取......; - )。
答案 1 :(得分:0)
response.info()
来检测编码如果要解析HTML,请保存响应数据:
page_text = response.read()
encoding = detect_html_encoding(response, page_text)