“内容”和“文本”的区别是什么?

197
我正在使用很棒的Python Requests库。我注意到精美文档中有许多如何完成某些事情的示例,但没有解释为什么要这样做。例如,r.textr.content都被作为获取服务器响应的示例,但它们各自的作用是什么却没有解释。例如,在什么情况下选择其中之一?我看到r.text有时返回一个Unicode对象,而对于非文本响应可能会有所不同。但这些在哪里记录?请注意,链接的文档确实说明:

您还可以以字节形式访问响应正文,以进行非文本请求:

但接着它又展示了一个文本响应的例子!我只能猜测上面的引用应该是说非文本响应而不是非文本请求,因为在HTTP中不存在非文本请求。

简而言之,除了Python Requests网站上(优秀的)教程之外,有关该库的文档在哪里?


简而言之,哪里有库的适当文档,而不是 Python Requests 网站上(优秀的)教程?侧边栏上的“API 参考”链接,也许可以? - Karl Knechtel
1
@KarlKnechtel:谢谢。很有可能在八年前提出这个问题时,Python Requests网站的组织方式是不同的! - dotancohen
2个回答

223
< p > requests.Response 类的文档有更多细节:

r.text是Unicode编码的响应内容,r.content 是字节编码的响应内容。


77
你什么时候会选择其中一个而不是另一个? - multigoodverse
38
假设r.text更适合处理文本响应,例如HTML或XML文档,而r.content更适合处理“二进制”文件类型,例如图像或PDF文件。 - dotancohen
7
HTML和XML在数据中使用声明来进行自己的解码,因此应该将原始的r.content提供给它们,而不是转换后的r.text - tdelaney
1
更普遍地说,单个响应可能包含嵌套或多部分内容(例如带有附件的电子邮件消息),每个部分可能以不同的方式编码。如果没有访问字节流,处理这样的响应是不可能的,但这与常见情况相距甚远,常见情况只需要正确解码的Unicode文本即可。 - holdenweb
2
为什么Python解释器将r.textr.content都显示为文本?为什么不将r.content显示为文本,而将r.text显示为位(如果它本质上是这样的)? - Arnb

14

根据文档,r.content似乎很清晰。

You can also access the response body as bytes, for non-text requests:

 >>> r.content

如果您继续阅读页面,它会解释例如图像文件的问题。


4
谢谢。我现在看到第一个示例文本中前面的小写字母b,这表示该对象是一个字节对象。不清楚为什么字节被显示为文本,也许这是 Python 的另一个“好处”,但在此情况下很令人困惑。谢谢。 - dotancohen
2
这似乎比Python 2.x更重要,使用Python 3中的requestspage.content上会出现以下错误:if'rss'in page.content:-- > TypeError:需要类似字节的对象,而不是'str' - Marc Maxmeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接