PythonでUTF-8 BOM付きのファイルを扱う際には、エンコードを ‘utf_8_sig’ と指定します。これにより、BOM付きのUTF-8ファイルを読み込むことが可能となります。
BOMとは
UTF-8にはBOM (Byte order mark)が付く場合があります。これはエンコードがUTF-8であるという識別子です。ファイルの先頭3バイトが ‘EF BB BF’ となっています。厄介なのが、BOMが有るUTF-8と、無いUTF-8があるのです。
PythonでUTF-8 BOM有りファイルを扱う
PythonでUTF-8 BOM有りファイルを扱う際には、エンコードを ‘utf_8_sig’ と指定します。これにより、BOM有りの場合スキップして読み込んでくれます。BOM無しの場合はそのままUTF-8として読み込むことが可能です。
import io
with io.open('sample.csv', 'rt', encoding='utf_8_sig') as f:
print(f.readlines())
このサンプルプログラムは、BOM付きのUTF-8でエンコードされた ‘sample.csv’ ファイルを読み込み、その内容を表示します。
Pythonで文字コードはハマりがちですが、unicode型に変換するときの文字コードしっかり扱えれば、文字コード関連で悩むことが少なくなりそうです。.