Estou tendo problemas para lidar com caracteres unicode do texto buscado em diferentes páginas da web (em sites diferentes). Estou usando o BeautifulSoup.
O problema é que o erro nem sempre é reproduzível; às vezes funciona com algumas páginas e, às vezes, vomita jogando a UnicodeEncodeError
. Eu tentei praticamente tudo o que consigo pensar e, no entanto, não encontrei nada que funcionasse de maneira consistente sem gerar algum tipo de erro relacionado ao Unicode.
Uma das seções do código que está causando problemas é mostrada abaixo:
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()
Aqui está um rastreamento de pilha produzido em ALGUMAS strings quando o snippet acima é executado:
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)
Suspeito que isso ocorra porque algumas páginas (ou mais especificamente, páginas de alguns dos sites) podem ser codificadas, enquanto outras podem não ser codificadas. Todos os sites são baseados no Reino Unido e fornecem dados destinados ao consumo no Reino Unido - portanto, não há problemas relacionados à internalização ou ao tratamento de texto escrito em outro idioma que não seja o inglês.
Alguém tem alguma idéia de como resolver isso, para que eu possa consistentemente corrigir esse problema?
import os; import locale; os.environ["PYTHONIOENCODING"] = "utf-8"; myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8"); ... print(myText.encode('utf-8', errors='ignore'))
.
$ export PYTHONIOENCODING=utf8