小编典典

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

all

我在处理从不同网页(在不同网站上)获取的文本中的 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()

这是运行上面的代码片段时在某些字符串上产生的堆栈跟踪:

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)

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

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


阅读 124

收藏
2022-02-25

共1个答案

小编典典

您需要阅读 Python Unicode
HOWTO
。这个错误是第一个例子

基本上,停止使用str从 unicode 转换为编码文本/字节。

相反,正确使用.encode()对字符串进行编码:

p.agent_info = u' '.join((agent_contact, agent_telno)).encode('utf-8').strip()

或完全使用 unicode。

2022-02-25