如何使用Python Requests库处理编码

时间:2012-07-21 00:17:26

标签: python unicode encoding python-requests

我在编码方面已经挣扎太久了,今天我想彻底打破精神障碍。

现在,我正在使用Requests来抓取一堆网站,而我可以告诉它使用HTTP标头来找出网页正在使用的编码,然后回到{{ 3}}当网站的标题丢失时。从那里,它解码它下载的字节码,然后帮助我在r.text中传递一个unicode对象。

一切都很好。

但我感到困惑的是,我从那里开始对文本做一些工作,然后将其打印到stdout,在打印时提供编码:

 print foo.encode('utf-8')

问题在于,当我这样做时,打印的东西搞砸了。在下文中,我希望在“判断”和“标准”这两个词之间得到一个简单的说法:

 Declaratory judgmentsStandard of review.

相反,我得到四个小数字的四四方方的东西。当然,它似乎没有显示在这里,但我认为数字是0097,这与我得到的数字相对应:

repr(foo)
u'Declaratory judgments\x97Standard of review.'

这样有道理,但我的emdash在哪里?

这个过程归结为:

  1. 请求下载页面并智能地将文本解码为unicode对象
  2. 我使用它
  3. 我将其编码为utf-8并打印出来。
  4. 问题出在哪里?对我来说这听起来像是chardet,但显然我错过了一些东西。

1 个答案:

答案 0 :(得分:4)

你正在做一些奇怪的事情。 \x97cp1252编码中的emdash。在Unicode字符串中,它是U+0097 END OF GUARDED AREA。不知何故,你正在读取cp1252字节作为Unicode。显示更多使您进入此状态的代码,我们可以深入挖掘。

PS:Unicode三明治几乎不是神话,它是一个理想的选择! :)