慕斯王
2019-05-28 17:16:55
UnicodeEncodeError:'ascii'編解碼器無(wú)法對(duì)位置20中的字符u'\ xa0'進(jìn)行編碼:序數(shù)不在范圍內(nèi)(128)我在處理從不同網(wǎng)頁(yè)(在不同網(wǎng)站上)獲取的文本中的unicode字符時(shí)遇到問(wèn)題。我正在使用BeautifulSoup。問(wèn)題是錯(cuò)誤并不總是可重現(xiàn)的; 它有時(shí)適用于某些頁(yè)面,有時(shí)候,它會(huì)通過(guò)拋出一個(gè)UnicodeEncodeError。我已經(jīng)嘗試了幾乎所有我能想到的東西,但是我沒(méi)有找到任何可以持續(xù)工作的東西而不會(huì)拋出某種與Unicode相關(guān)的錯(cuò)誤。導(dǎo)致問(wèn)題的代碼部分之一如下所示: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()以下是運(yùn)行上述代碼段時(shí)在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)我懷疑這是因?yàn)槟承╉?yè)面(或更具體地說(shuō),來(lái)自某些站點(diǎn)的頁(yè)面)可能被編碼,而其他頁(yè)面可能是未編碼的。所有這些網(wǎng)站都位于英國(guó),并提供供英國(guó)消費(fèi)的數(shù)據(jù) - 因此,沒(méi)有與內(nèi)部化或處理用英語(yǔ)以外的任何文字處理的文本相關(guān)的問(wèn)題。有沒(méi)有人有任何想法如何解決這個(gè)問(wèn)題,以便我可以一致地解決這個(gè)問(wèn)題?
4 回答

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

慕森王
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
我發(fā)現(xiàn)優(yōu)雅的工作方法可以刪除符號(hào)并繼續(xù)將字符串保存為字符串如下:
yourstring = yourstring.encode('ascii', 'ignore').decode('ascii')
重要的是要注意使用ignore選項(xiàng)是危險(xiǎn)的,因?yàn)樗鼤?huì)靜默地從使用它的代碼中刪除任何unicode(和國(guó)際化)支持,如此處所示(轉(zhuǎn)換unicode):
>>> u'City: Malm?'.encode('ascii', 'ignore').decode('ascii')'City: Malm'

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