“内容”和“文本”有啥区别
Posted
技术标签:
【中文标题】“内容”和“文本”有啥区别【英文标题】:What is the difference between 'content' and 'text'“内容”和“文本”有什么区别 【发布时间】:2013-06-05 08:52:09 【问题描述】:我正在使用很棒的 Python Requests 库。我注意到fine documentation 有很多如何 做某事的例子,而没有解释为什么。例如,r.text
和r.content
都显示为如何 获取服务器响应的示例。 但它在哪里解释了这些属性的作用?例如,我什么时候会选择一个而不是另一个?我看到 thar r.text
返回一个 unicode 对象有时,我想非文本响应会有所不同。但是所有这些记录在哪里?请注意,链接的文档确实声明:
对于非文本请求,您还可以按字节访问响应正文:
然后它继续显示文本响应的示例!我只能假设上面引用的意思是说non-text responses
而不是non-text requests
,因为非文本请求在HTTP中没有意义。
简而言之,与 Python Requests 网站上的(优秀的)教程相比,该库的正确文档在哪里?
【问题讨论】:
相关:Should I use .text or .content when parsing a Requests response? “简而言之,与 Python 请求站点上的(优秀)教程相反,库的正确文档在哪里?”可能是侧边栏上的“API 参考”链接? @KarlKnechtel:谢谢。八年前提出这个问题时,Python Requests 网站的组织方式很可能有所不同! 【参考方案1】:requests.Response
类 documentation 有更多详细信息:
r.text
是响应的 Unicode 内容,r.content
是响应的内容,以字节为单位。
【讨论】:
你什么时候选择其中一个? @multigoodverse:可能r.text
更适合文本响应,例如 html 或 XML 文档,r.content
更适合“二进制”文件类型,例如图像或 PDF 文件.
@dotancohen HTML 和 XML 使用数据中的声明来进行自己的解码,因此它们应该被提供原始的 r.content
,而不是隐藏的 r.text
。
更一般地说,单个响应可能包含嵌套或多部分内容(如带有附件的电子邮件),并且每个部分可能以不同的方式编码。如果不访问字节流,就不可能处理这样的响应,但这与您只需要正确解码的 Unicode 文本的常见情况相去甚远。
为什么python解释器将r.text
和r.content
都显示为文本。为什么不将r.content
显示为文本,将r.text
显示为位(如果它本来就是这样的话)?【参考方案2】:
从文档中可以清楚地看出 r.content
You can also access the response body as bytes, for non-text requests:
>>> r.content
如果您进一步阅读页面,它会处理例如图像文件
【讨论】:
谢谢。我现在看到第一个示例前面的小b
带有文本“用于非文本请求”,这意味着该对象是字节对象。目前尚不清楚为什么字节被显示为文本,也许这是另一个 Python 的“好”,但在这种情况下它是令人困惑的。谢谢。
这似乎对 python 3.x 比 python 2.x 更重要;在 page.content 上的 python 3 中使用 requests
会出现此错误:if 'rss' in page.content:
--> TypeError: a bytes-like object is required, not 'str'
以上是关于“内容”和“文本”有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
JS中textContent和value有啥区别?同样是取值内容,为啥不能通用?
QT中LineEdit TextEdit PlainTextEdit 这三个控件有啥区别,分别用在啥情况下呢。