はじめに
Pythonでファイルを読み込むと、「UnicodeDecodeError」がよく発生します。
その対処法をメモします。
基本は、「読込ファイルの文字コード」と「Pythonデフォルトの文字コード」に注意して実装すれば対処できます。
UnicodeDecodeError: 'XXXXXXXXXX(ex.ascii)' codec can't decode bytes in position 56-57: illegal multibyte sequence
ファイルが'XXXXXXXXXX'コードではない場合、このようなエラーが出ます。
1. asciiのエラー場合
以下のようなasciiのエラーの場合は、 デフォルトの文字コードをutf-8にすることで解消することができます。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
以下のサイトの方法でデフォルトを変更できます。
Python スクリプト実行時に UnicodeDecodeError が出る場合の対処方法
できない場合は、こちらをソースコードに書いてみてください。
import sys
# sysモジュールをリロード
reload(sys)
# デフォルトの文字コードを変更
sys.setdefaultencoding('utf-8')
# 確認
print 'defaultencoding:', sys.getdefaultencoding()
2. shift-jisのエラー場合
shift-jisのエラーメッセージの場合は、読み込みファイルがshift-jisではなく、
utf-8とかの可能性があります。
UnicodeDecodeError: 'shift_jis' codec can't decode bytes in position 56-57: illegal multibyte sequence
従って、ファイルのオープンのコードを変更してください。
fin = codecs.open(filename, 'r', 'utf-8')
3. utf-8のエラー場合
utf-8のエラーメッセージの場合は、読み込みファイルがutf-8ではなく、
shift-jisとかの可能性があります。
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 56-57: illegal multibyte sequence
従って、ファイルのオープンのコードを変更してください。
fin = codecs.open(filename, 'r', 'shift-jis')
さいごに
「読込ファイルの文字コード」と「Pythonデフォルトの文字コード」に注意して実装すれば対処できます。
たまにpythonをやるとハマりますので、個人的なメモとして書きました。。。