(異なるサイトの)異なるWebページからフェッチされたテキストからのUnicode文字の処理に問題があります。BeautifulSoupを使用しています。
問題は、エラーが常に再現できるとは限らないことです。いくつかのページで動作することもあれば、をスローすることでbarfsすることもありUnicodeEncodeError
ます。考えられる限りのことをすべて試しましたが、何らかのUnicode関連のエラーをスローせずに一貫して機能するものは何も見つかりませんでした。
問題の原因となっているコードのセクションの1つを以下に示します。
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()
上記のスニペットが実行されたときにSOME文字列で生成されるスタックトレースは次のとおりです。
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