从httplib GET解码内容

2024-09-29 19:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在获取一个简单的HTTP纯文本,它在CP-1250中(我不能影响它),并希望对其进行解码,每行处理一行,最后将其保存为UTF-8。在

第一部分给我带来了麻烦。在我使用response.read()获得原始数据后,我将其传递给由getreader("cp1250")从codecs库创建的读取器。我希望得到一个StreamReader实例,只需调用readlines来获得一个字节字符串列表。在

import codecs
import httplib

# nothing unusual
conn = httplib.HTTPConnection('server')
conn.request('GET', '/')
response = conn.getresponse()
content = response.read()

# the painful part
sr = codecs.getreader("cp1250")(content)
lines = sr.readlines()      # d'oh!

但在调用readlines之后,我只听到来自编解码器内部深处的呼喊声:

^{pr2}$

我的print确认sr是StreamReader的实例;它使我困惑的是,对象似乎初始化良好,但现在无法执行readline。。。这里少了什么?在

或者是库试图神秘地告诉我数据已损坏(不是CP-1250)?在

编辑:正如jorispilot建议的那样,unicode(content, encoding="cp1250")是有效的,所以我可能会在我的解决方案中继续使用它。但是,我仍然想知道我使用编解码器库有什么问题。在


Tags: 实例importreadresponse编解码器contentconncp
2条回答

根据http://docs.python.org/2/library/codecs.htmlgetreader()返回StreamReader。它必须传递一个流,它实现了read()函数,而不是像您所做的那样,一个字符串。在

要解决这个问题,不要从response读取数据,而是直接将其传递给StreamReader,如下所示。在

conn = httplib.HTTPConnection('server')
conn.request('GET', '/')
response = conn.getresponse()

reader = codecs.getreader("cp1250")(response)
lines = sr.readlines()
utf8_lines = []
for line in content.split('\n'):
   line = line.strip().decode('cp1250')
   utf8_lines.append(line.encode('utf-8'))

相关问题 更多 >

    热门问题