Ich habe Probleme mit Unicode-Zeichen aus Text, der von verschiedenen Webseiten (auf verschiedenen Websites) abgerufen wurde. Ich benutze BeautifulSoup.
Das Problem ist, dass der Fehler nicht immer reproduzierbar ist. es funktioniert manchmal mit einigen Seiten, und manchmal barfs es, indem es ein wirft UnicodeEncodeError
. Ich habe so gut wie alles versucht, was mir einfällt, und dennoch nichts gefunden, das konsistent funktioniert, ohne einen Unicode-Fehler auszulösen.
Einer der Codeabschnitte, die Probleme verursachen, ist unten dargestellt:
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()
Hier ist eine Stapelverfolgung, die für einige Zeichenfolgen erstellt wird, wenn das obige Snippet ausgeführt wird:
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)
Ich vermute, dass dies daran liegt, dass einige Seiten (oder genauer gesagt Seiten von einigen Websites) möglicherweise codiert sind, während andere möglicherweise nicht codiert sind. Alle Websites haben ihren Sitz in Großbritannien und bieten Daten, die für den Verbrauch in Großbritannien bestimmt sind. Es gibt also keine Probleme im Zusammenhang mit der Internalisierung oder dem Umgang mit Texten, die nicht in Englisch verfasst sind.
Hat jemand irgendwelche Ideen, wie man das löst, damit ich dieses Problem konsequent beheben kann?
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