我是Python和Scrapy的新手,我正在尝试测试一个字符串(使用xpath选择器提取)是否包含英镑符号(英国货币 - £)。
在我的源文件顶部,我指定了编码:
# -*- coding: latin-1 -*-
我正在进行这项测试:
if '£' in price:
...
但是我收到错误例外.UnicodeDecodeError:'ascii'编解码器无法解码字节0xc2。
如果我将测试更改为
price = price.encode('utf-8')
if '£' in price:
...
有效。有人可以解释为什么price.encode()调用是必要的,我知道Scrapy无论如何都会返回unicode字符串。非常感谢
答案 0 :(得分:1)
# these have different types:
if some_string in some_unicode_object
这样做相当于写作:
# convert the first argument so we can do the `in`
if some_string.decode('ascii') in some_unicode_object
所以在你的例子中:
if '£' in price:
# ^string ^unicode
您正在调用'£'.encode('ascii')
,因为它不是ASCII字节字符串而失败。
更好的写作方式是:
if u'£' in price:
或者,您可能想要写from __future__ import unicode_literals
。