【问题标题】:Eliminate \xa0 return UnicodeEncodeError消除 \xa0 返回 UnicodeEncodeError
【发布时间】:2018-03-06 08:29:24
【问题描述】:

我正在使用 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],但我仍然遇到同样的错误。

【问题讨论】:

  • \xa0 只是一个字节,而不是 Unicode。 ASCII 编码文本也是 Unicode 的一部分。
  • 另一方面,u'\xa0' 是一个 Unicode 字符串,其 Latin-1 范围代码点为 U+00A0,它在 ASCII 范围之外。 '\xa0' 只是一个包含 0xA0 字节的字节串。

标签: python xpath unicode


【解决方案1】:

您正在混合字节和 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]

【讨论】:

  • 谢谢。但答案是'你离开了。也可以删除吗? [u' ', u' ', u' Bard1 Life Sciences Limited ', u' Gold' , u' Basic Materials', u' ASX', u' 7'..]
  • @bkcollection:u 是一个类型指示符,不是文本的一部分。您有一个 Unicode 字符串对象列表。
【解决方案2】:

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

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

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

【讨论】:

  • 您好,它可以工作,但无法删除列表中的 'u' [u' ', u' ', u' Bard1 Life Sciences Limited ', u' Gold' , u' Basic Materials ', u' ASX', u' 7'..]`
  • @bkcollection:您不想删除 u 前缀,它们表示您有 Unicode 字符串对象。您想要 Unicode 字符串对象。
猜你喜欢
  • 2014-01-03
  • 2020-04-13
  • 2016-11-06
  • 2019-08-21
  • 2021-02-10
  • 1970-01-01
  • 2017-05-30
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多