我在编码上挣扎了太久了,今天我想彻底打破思维障碍。在
现在,我正在使用Requests来抓取一堆网站,从中可以看出,它是使用HTTP报头来计算页面使用的编码,当站点的报头丢失时,返回到chardet。从那里,它解码它下载的字节码,然后帮助我在r.text
中给我一个unicode对象。在
一切都好。在
但我感到困惑的是,从这里开始,我对文本进行了一些处理,然后将其打印到stdout,在打印时提供编码:
print foo.encode('utf-8')
问题是当我这么做的时候,打印出来的东西就乱七八糟了。在下面,我希望在“判断”和“标准”这两个词之间有一个冲突:
^{pr2}$取而代之的是,我得到了一个有四个小数字的盒子。当然,这里似乎没有显示出来,但我认为数字是0097,这与我得到的结果相对应:
repr(foo)
u'Declaratory judgments\x97Standard of review.'
这样说有道理,但我的怨言呢?在
这个过程可以归结为:
问题在哪里?这听起来像是mythical unicode sandwich,但显然我遗漏了一些东西。在
你在做一些奇怪的事。
\x97
是{a1}编码中的emdash。在Unicode字符串中,它是U+0097 END OF GUARDED AREA。不知何故,您将cp1252字节作为Unicode读取。展示更多让你进入这种状态的代码,我们可以更深入地挖掘。在PS:Unicode三明治并不神秘,它是一个理想的奋斗目标!:)
相关问题 更多 >
编程相关推荐