ほんじゃらねっと

ダイエット中プログラマのブログ

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対応