如何使用Python Requests库处理编码

mli*_*ner 5 python unicode encoding python-requests

我已经在编码方面挣扎了很长时间,今天我想彻底打破精神障碍.

现在,我使用的要求凑一堆网站,并从我可以告诉它使用HTTP头找出该页面使用的编码,回落至chardet模块网站的标题时失踪.从那里,它解码它下载的字节码,然后帮助我一个unicode对象r.text.

都好.

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

 print foo.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

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

 Declaratory judgmentsStandard of review.
Run Code Online (Sandbox Code Playgroud)

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

repr(foo)
u'Declaratory judgments\x97Standard of review.'
Run Code Online (Sandbox Code Playgroud)

所以那是有道理的,但我的emdash在哪里?

这个过程归结为:

  1. 请求下载页面并智能地将文本解码为unicode对象
  2. 我一起工作
  3. 我把它编码为utf-8并将其打印出来.

哪里出了问题?这对我来说听起来像神话般的unicode三明治,但显然我错过了一些东西.

Ned*_*der 4

你正在做一些奇怪的事情。 是cp1252\x97编码中的破折号。在 Unicode 字符串中,它是U+0097 END OF GUARDED AREA。不知何故,您正在将 cp1252 字节读取为 Unicode。显示更多使您达到这种状态的代码,我们可以更深入地挖掘。

PS:Unicode 三明治并不是神话,它是一个值得奋斗的理想!:)