J'ai des problèmes avec les caractères unicode du texte récupéré à partir de différentes pages Web (sur différents sites). J'utilise BeautifulSoup.
Le problème est que l'erreur n'est pas toujours reproductible; il fonctionne parfois avec certaines pages, et parfois, il abat en lançant a UnicodeEncodeError
. J'ai essayé à peu près tout ce à quoi je peux penser, et pourtant je n'ai rien trouvé qui fonctionne de manière cohérente sans lancer une sorte d'erreur liée à Unicode.
L'une des sections de code qui pose problème est illustrée ci-dessous:
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()
Voici une trace de pile produite sur CERTAINES chaînes lorsque l'extrait ci-dessus est exécuté:
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)
Je soupçonne que cela est dû au fait que certaines pages (ou plus précisément, les pages de certains sites) peuvent être codées, tandis que d'autres peuvent ne pas l'être. Tous les sites sont basés au Royaume-Uni et fournissent des données destinées à la consommation au Royaume-Uni - il n'y a donc aucun problème lié à l'internalisation ou au traitement de texte écrit en autre chose qu'en anglais.
Quelqu'un at-il des idées sur la façon de résoudre ce problème afin que je puisse résoudre ce problème de manière cohérente?
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