如何使用Python请求库处理编码

2024-05-13 12:58:22 发布

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

我在编码上挣扎了太久了,今天我想彻底打破思维障碍。在

现在,我正在使用Requests来抓取一堆网站,从中可以看出,它是使用HTTP报头来计算页面使用的编码,当站点的报头丢失时,返回到chardet。从那里,它解码它下载的字节码,然后帮助我在r.text中给我一个unicode对象。在

一切都好。在

但我感到困惑的是,从这里开始,我对文本进行了一些处理,然后将其打印到stdout,在打印时提供编码:

 print foo.encode('utf-8')

问题是当我这么做的时候,打印出来的东西就乱七八糟了。在下面,我希望在“判断”和“标准”这两个词之间有一个冲突:

^{pr2}$

取而代之的是,我得到了一个有四个小数字的盒子。当然,这里似乎没有显示出来,但我认为数字是0097,这与我得到的结果相对应:

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

这样说有道理,但我的怨言呢?在

这个过程可以归结为:

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

问题在哪里?这听起来像是mythical unicode sandwich,但显然我遗漏了一些东西。在


Tags: 对象文本http编码foo网站unicode数字
1条回答
网友
1楼 · 发布于 2024-05-13 12:58:22

你在做一些奇怪的事。\x97是{a1}编码中的emdash。在Unicode字符串中,它是U+0097 END OF GUARDED AREA。不知何故,您将cp1252字节作为Unicode读取。展示更多让你进入这种状态的代码,我们可以更深入地挖掘。在

PS:Unicode三明治并不神秘,它是一个理想的奋斗目标!:)

相关问题 更多 >