たまにファイルの読み込み時(後?)にDecodeErrorする謎現象に遭いました。
どうやらファイルがShift-JISで書き込まれていたのをUTF-8で読み込もうとしていたのが原因。そういえばファイルをAtomで編集したときSJISで保存したかもしれない。うちのAtomは気を抜いたらなぜかSJISで書き込もうとする。
調べたらopen関数でencoding引数があったので、それを指定すれば確実にUTF-8で読み書き可能です。
f = open("hoge.txt", "w", encoding="utf-8") f.write("あいうえお") f.close()
encoding引数を指定しない場合のデフォルト値はNoneで、どのエンコーディングになるかはプラットフォーム依存らしいです。
encoding はファイルのエンコードやデコードに使われる text encoding の名前です。このオプションはテキストモードでのみ使用してください。デフォルトエンコーディングはプラットフォーム依存 (locale.getpreferredencoding() が返すもの) ですが、Pythonでサポートされているエンコーディングはどれでも使えます。詳しくは codecs モジュール内のサポートしているエンコーディングのリストを参照してください。