1

私は、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)
4

1 に答える 1

1

「最高」はアプリケーションによって異なります。関数を段階的に改善できます。

def to_unicode_with_ascii_backoff(text):
    u = UnicodeDammit(text).unicode_markup
    return u if u or not text else text.decode('ascii', 'replace')

常に Unicode 文字列を返すか、入力がバイト文字列または Unicode 文字列でない場合はエラーを発生させます。

于 2013-04-10T20:29:19.893 に答える