Mam problemy z obsługą znaków Unicode z tekstu pobranego z różnych stron internetowych (na różnych stronach). Używam BeautifulSoup.
Problem polega na tym, że błąd nie zawsze jest powtarzalny; czasami działa z niektórymi stronami, a czasem obrzuca, rzucając UnicodeEncodeError
. Próbowałem prawie wszystkiego, co mogłem wymyślić, a jednak nie znalazłem niczego, co działałoby konsekwentnie bez zgłaszania jakiegoś błędu związanego z Unicode.
Jedna z sekcji kodu, która powoduje problemy, pokazano poniżej:
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()
Oto ślad stosu wygenerowany na NIEKTÓRYCH ciągach znaków po uruchomieniu powyższego fragmentu:
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)
Podejrzewam, że dzieje się tak, ponieważ niektóre strony (a ściślej strony z niektórych witryn) mogą być kodowane, podczas gdy inne mogą być zakodowane. Wszystkie strony mają siedzibę w Wielkiej Brytanii i dostarczają dane przeznaczone do konsumpcji w Wielkiej Brytanii - więc nie ma żadnych problemów związanych z internalizacją lub obsługą tekstu napisanego w języku innym niż angielski.
Czy ktoś ma jakieś pomysły, jak to rozwiązać, abym ZGODNIE rozwiązał ten problem?
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