UnicodeEncodeError:'ascii'编解码器无法对位置20中的字符u'\ xa0'

UnicodeEncodeError:'ascii'编解码器无法对位置20中的字符u'\ xa0'进行编码:序数不在范围内(128)

我在处理从不同网页(在不同网站上)获取的文本中的unicode字符时遇到问题。我正在使用BeautifulSoup。

问题是错误并不总是可重现的; 它有时适用于某些页面,有时候,它会通过抛出一个UnicodeEncodeError。我已经尝试了几乎所有我能想到的东西,但是我没有找到任何可以持续工作的东西而不会抛出某种与Unicode相关的错误。

导致问题的代码部分之一如下所示:

agent_telno = agent.find('div', 'agent_contact_number')agent_telno = '' if agent_telno is None else agent_telno.contents[0]p
.agent_info = str(agent_contact + ' ' + agent_telno).strip()

以下是运行上述代码段时在SOME字符串上生成的堆栈跟踪:

Traceback (most recent call last):
  File "foobar.py", line 792, in <module>
    p.agent_info = str(agent_contact + ' ' + agent_telno).strip()UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' 
    in position 20: ordinal not in range(128)

我怀疑这是因为某些页面(或更具体地说,来自某些站点的页面)可能被编码,而其他页面可能是未编码的。所有这些网站都位于英国,并提供供英国消费的数据 - 因此,没有与内部化或处理用英语以外的任何文字处理的文本相关的问题。

有没有人有任何想法如何解决这个问题,以便我可以一致地解决这个问题?


慕斯王
浏览 1403回答 4
4回答

芜湖不芜

您需要阅读Python&nbsp;Unicode HOWTO。这个错误是第一个例子。基本上,停止使用str从unicode转换为编码的文本/字节。相反,正确使用.encode()编码字符串:p.agent_info&nbsp;=&nbsp;u'&nbsp;'.join((agent_contact,&nbsp;agent_telno)).encode('utf-8').strip()或者完全以unicode工作。

慕森王

我发现优雅的工作方法可以删除符号并继续将字符串保存为字符串如下:yourstring&nbsp;=&nbsp;yourstring.encode('ascii',&nbsp;'ignore').decode('ascii')重要的是要注意使用ignore选项是危险的,因为它会静默地从使用它的代码中删除任何unicode(和国际化)支持,如此处所示(转换unicode):>>>&nbsp;u'City:&nbsp;Malmö'.encode('ascii',&nbsp;'ignore').decode('ascii')'City:&nbsp;Malm'

MM们

好吧,我尝试了一切,但它没有帮助,谷歌搜索后我认为以下,它有所帮助。python 2.7正在使用中。#&nbsp;encoding=utf8import&nbsp;sys reload(sys)sys.setdefaultencoding('utf8')
打开App,查看更多内容
随时随地看视频慕课网APP