Hatena::ブログ(Diary)

Pyro Memo RSSフィード

2008-03-09

[][] UnicodeDecodeErrorが発生する文字をignoreオプションで無視する

Python文字コードを変更する際に変換対象の文字列に変換不能な文字が

含まれているとUnicodeDecodeErrorが発生して困ることが多かった。


しかし、unicode関数やencode関数のignoreオプションを使うと、

それらの変換不能な文字列を無視して変換してくれる。

こんな便利なものがあったとは。


BeatifulSoupで不正な文字列を含むXMLを読み込むと、読み込んだ時に

文字コードをご認識してしまう問題が発生していたが、ignoreオプション付きで

文字コードを再変換したらうまく認識してくれた。


# file_dataは壊れたXMLデータ(UTF-8)

soup = BeautifulSoup(file_data)
print soup.originalEncoding # 文字コードが誤認識される

soup = BeautifulSoup(unicode(file_data, "utf-8").encode("utf-8")) # UnicodeDecodeError発生

soup = BeautifulSoup(unicode(file_data, "utf-8", 'ignore').encode("utf-8"))
print soup.originalEncoding # utf-8で正しく認識される


ただ、これが正しいやり方なのかが分からない。

そもそもignoreオプションは割と使いまくるものなのだろうか。


ignoreオプションについては「速効!Python」に載っていた。

もっとちゃんと読もうと思った。

速効!Pythonプログラミング―バージョン2.5対応

速効!Pythonプログラミング―バージョン2.5対応

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元