无法解码Unicode

时间:2015-03-08 22:17:04

标签: python unicode web-scraping

我有以下代码

results = requests.get("https://www.kimonolabs.com/api/ano64pm6?apikey=9ummN7C6KMHu9aErm49ixoy2ZySmaKCm").json()
mmoga = ([x["price"] for x in results["results"]["collection1"]])
print mmoga

这输出以下内容:

[u'\xa3\xa04.03', u'\xa3\xa06.02', u'\xa3\xa07.99', u'\xa3\xa09.96', u'\xa
\xa011.91', u'\xa3\xa013.84', u'\xa3\xa015.76', u'\xa3\xa017.67', u'\xa
\xa019.56', u'\xa3\xa029.24', u'\xa3\xa038.84', u'\xa3\xa048.38', u'\xa
\xa057.84', u'\xa3\xa067.23', u'\xa3\xa076.56', u'\xa3\xa085.81', u'\xa
\xa094.99', u'\xa3\xa0113.57', u'\xa3\xa0132.00', u'\xa3\xa0150.29',u'\xa3
\xa0168.45', u'\xa3\xa0186.46', u'\xa3\xa0204.33', u'\xa3  \xa0222.06',
u'\xa3    \xa0239.65', u'\xa3\xa0257.10', u'\xa3\xa0274.43']
[u'\xa3\xa04.03', u'\xa3\xa06.02', u'\xa3\xa07.99', u'\xa3\xa09.96', u'\xa  
\xa011.91', u'\xa3\xa013.84', u'\xa3\xa015.76', u'\xa3\xa017.67', u'\xa3    
\xa019.56', u'\xa3\xa029.24', u'\xa3\xa038.84', u'\xa3\xa048.38', u'\xa3
\xa057.84', u'\xa3\xa067.23', u'\xa3\xa076.56', u'\xa3\xa085.81', u'\xa3
\xa094.99', u'\xa3\xa0113.57', u'\xa3\xa0132.00', u'\xa3\xa0150.29', u'\xa3
\xa0168.45', u'\xa3\xa0186.46', u'\xa3\xa0204.33', u'\xa3\xa0222.06', u'\xa3
\xa0239.65', u'\xa3\xa0257.10', u'\xa3\xa0274.43']

然后我尝试使用以下代码删除所有字母:

while i< len(mmoga):
mmoga[i] = mmoga[i].translate(None, 'absdefghijklmnopqrstuvwxyz;&£$')
i+=1

这会显示错误消息

 translate() takes exactly one argument (2 given)

从某些搜索中我认为这是因为Unicode没有被解码但我对Python很新,我发现的所有解决方案都在Python 3中。

1 个答案:

答案 0 :(得分:2)

您已成功解码了内容,但\xa3\xa0字符可能会让您感到困惑。这些只是U+00A3 POUND SIGNU+00A0 NO-BREAK SPACE个字符,但Python在unicode字符串表示中只包含ASCII字符,其余的在此处显示为转义序列。

分别打印其中一个值:

>>> print u'\xa3\xa04.03'
£ 4.03

unicode.translate()方法与str.translate的工作方式不同。要删除字符,请将它们作为映射到None的字典放在第一个参数中。

我在这里使用str.strip()

>>> u'\xa3\xa04.03'.strip(u'\xa3\xa0')
u'4.03'