У меня проблемы с работой символов юникода из текста, полученного с разных веб-страниц (на разных сайтах). Я использую BeautifulSoup.
Проблема в том, что ошибка не всегда воспроизводима; иногда он работает с некоторыми страницами, а иногда он бросает a UnicodeEncodeError
. Я перепробовал практически все, что мог придумать, и все же я не нашел ничего, что работало бы последовательно, не выдавая какую-то ошибку, связанную с Unicode.
Один из разделов кода, который вызывает проблемы, показан ниже:
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()
Вот трассировка стека, созданная для НЕКОТОРЫХ строк при выполнении приведенного выше фрагмента:
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)
Я подозреваю, что это потому, что некоторые страницы (или, более конкретно, страницы с некоторых сайтов) могут быть закодированы, в то время как другие могут быть не закодированы. Все сайты базируются в Великобритании и предоставляют данные, предназначенные для потребления в Великобритании, поэтому не возникает проблем, связанных с интернализацией или работой с текстом, написанным на чем-либо, кроме английского.
У кого-нибудь есть идеи относительно того, как решить эту проблему, чтобы я ПОСТОЯННО исправил эту проблему?
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