私は、BeautifulSoup4 の UnicodeDammit モジュールの大ファンです。このモジュールは、文字列を Unicode にしっかりと配置し、HTML のエスケープ解除も行います。
from bs4 import UnicodeDammit
unicode_page = UnicodeDammit(raw_page, [suspected_encodings_if_any]).unicode_markup
ただし、強力なダムミットでさえ失敗し、空の文字列を返す場合があります。そのような場合に備えて、ASCIIへの何らかのバックオフが必要です。
くそーはシャルデを使用しているので、それに後退しても意味がありません. (Dammit は iconv_codec ライブラリも探しています - 経験のある人はいますか?) ascii に戻る最良の方法は何ですか? この試みは物事を失いますが、うまくいくようです:
def to_unicode_with_ascii_backoff(text):
if isinstance(text, unicode):
return text
else:
ud = UnicodeDammit(text).unicode_markup
if ud:
return ud
else:
return ''.join(i for i in text if ord(i) < 128)