消除 xa0返回UnicodeEncodeError

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消除 xa0返回UnicodeEncodeError相关的知识,希望对你有一定的参考价值。

我使用Xpath获取数据,输出的'xa0'是Unicode。我想消除它,但它返回:

UnicodeEncodeError: 'ascii' codec can't encode character u'xa0' in position 0: ordinal not in range(128)

这是我的代码:

page_active = requests.get('http://www.marketinout.com/stock-screener/stocks.php?list=volume_leaders&exch=asx')
active = html.fromstring(page_active.content)
data = active.xpath('//tbody/tr/td/text()')
data >>> [u'xa0', u'xa0', u'xa0Bard1 Life Sciences Limited                                                         

                                                                                                           ',
 u'xa0Gold', u'xa0Basic Materials', u'xa0ASX', u'xa07', u'xa00.025', u'xa00.015', u'xa0150.0', u'xa02
78,097,367', u'xa0', u'xa0', u'xa0Patrys Ltd  ...]

为了消除'xa0',我尝试了[a.replace('xa0',' ') for a in data],但它返回:

UnicodeEncodeError: 'ascii' codec can't encode character u'xa0' in position 0: ordinal not in range(128)

我也使用[a.decode('utf-8').replace("xa0","") for a in data]但我仍然得到同样的错误。

答案

您正在混合字节和Unicode,不要这样做。改为使用Unicode字符串文字:

[a.replace(u'xa0', u' ') for a in data]

否则,Python将尝试将字节串'xa0'解码为ASCII,而0xA0不是有效的ASCII码点。

或者,使用unicode.strip()删除尾随和前导空格; U + 00A0代码点计为空格:

[a.strip() for a in data]
另一答案

您需要告诉Python将您的字符串解释为Unicode。

为此,请在字符串前添加u

[a.replace(u'xa0', u' ') for a in data]

以上是关于消除 xa0返回UnicodeEncodeError的主要内容,如果未能解决你的问题,请参考以下文章

Repeater用ul li,一行显示多条数据

ADO:防止更新的数据含有单引号而出错

排序 选择排序

遍历页面所有的Checkbox,显示选中的ID

获取所有querystring变量名

在GridView中的每一页末尾添加空行