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)我懷疑這是因為某些頁面(或更具體地說,來自某些站點的頁面)可能被編碼,而其他頁面可能是未編碼的。所有這些網站都位于英國,并提供供英國消費的數據 - 因此,沒有與內部化或處理用英語以外的任何文字處理的文本相關的問題。有沒有人有任何想法如何解決這個問題,以便我可以一致地解決這個問題?
4 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
您需要閱讀Python Unicode HOWTO。這個錯誤是第一個例子。
基本上,停止使用str
從unicode轉換為編碼的文本/字節。
相反,正確使用.encode()
編碼字符串:
p.agent_info = u' '.join((agent_contact, agent_telno)).encode('utf-8').strip()
或者完全以unicode工作。

慕森王
TA貢獻1777條經驗 獲得超3個贊
我發現優雅的工作方法可以刪除符號并繼續將字符串保存為字符串如下:
yourstring = yourstring.encode('ascii', 'ignore').decode('ascii')
重要的是要注意使用ignore選項是危險的,因為它會靜默地從使用它的代碼中刪除任何unicode(和國際化)支持,如此處所示(轉換unicode):
>>> u'City: Malm?'.encode('ascii', 'ignore').decode('ascii')'City: Malm'

MM們
TA貢獻1886條經驗 獲得超2個贊
好吧,我嘗試了一切,但它沒有幫助,谷歌搜索后我認為以下,它有所幫助。python 2.7正在使用中。
# encoding=utf8import sys reload(sys)sys.setdefaultencoding('utf8')
添加回答
舉報
0/150
提交
取消