我在编码方面已经挣扎太久了,今天我想彻底打破精神障碍。
现在,我正在使用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在哪里?
这个过程归结为:
问题出在哪里?对我来说这听起来像是chardet,但显然我错过了一些东西。
答案 0 :(得分:4)
\x97
是cp1252编码中的emdash。在Unicode字符串中,它是U+0097 END OF GUARDED AREA。不知何故,你正在读取cp1252字节作为Unicode。显示更多使您进入此状态的代码,我们可以深入挖掘。
PS:Unicode三明治几乎不是神话,它是一个理想的选择! :)