簡體   English   中英

python UnicodeEncodeError>如何簡單地刪除令人不安的unicode字符?

[英]python UnicodeEncodeError > How can I simply remove troubling unicode characters?

繼承人我做了什么..

>>> soup = BeautifulSoup (html)
>>> soup
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 96953: ordinal not in range(128)
>>> 
>>> soup.find('div')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 11035: ordinal not in range(128)
>>> 
>>> soup.find('span')
<span id="navLogoPrimary" class="navSprite"><span>amazon.com</span></span>
>>> 

如何從html刪除令人不安的unicode字符?
或者有更清潔的解決方案嗎?

試試這個: soup = BeautifulSoup (html.decode('utf-8', 'ignore'))

您看到的錯誤是由於repr(soup)嘗試混合Unicode和字節串。 混合Unicode和字節串經常會導致錯誤。

相比:

>>> u'1' + '©'
Traceback (most recent call last):
  File "<input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

和:

>>> u'1' + u'©'
u'1\xa9'
>>> '1' + u'©'
u'1\xa9'
>>> '1' + '©'
'1\xc2\xa9'

這是類的示例:

>>> class A:
...     def __repr__(self):
...         return u'copyright ©'.encode('utf-8')
... 
>>> A()
copyright ©
>>> class B:
...     def __repr__(self):
...         return u'copyright ©'
... 
>>> B()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 10: ordi
nal not in range(128) #' workaround highlighting bug
>>> class C:
...     def __repr__(self):
...         return repr(A()) + repr(B())
...
>>> C()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 3, in __repr__
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 10: ordi
nal not in range(128)

類似的事情發生在BeautifulSoup

>>> html = """<p>©"""
>>> soup = BeautifulSoup(html)
>>> repr(soup)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 3: ordin
al not in range(128)

要解決它:

>>> unicode(soup)
u'<p>\xa9</p>'
>>> str(soup)
'<p>\xc2\xa9</p>'
>>> soup.encode('utf-8')
'<p>\xc2\xa9</p>'

首先,“令人不安”的unicode字符可能是某種語言的字母,但假設您不必擔心非英語字符,那么您可以使用python lib將unicode轉換為ansi。 看看這個問題的答案: 如何使用Python將文件的格式從Unicode轉換為ASCII?

接受的答案似乎是一個很好的解決方案(事先我不知道)。

我有同樣的問題,花了幾個小時。 請注意,只要解釋器​​必須顯示內容,就會發生錯誤,這是因為解釋器正在嘗試轉換為ascii,從而導致出現問題。 看看這里的最佳答案:

使用BeautifulSoup 3.1.0.1和Python 2.5.2的UnicodeEncodeError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM