Python で CSV ファイルを読み込むときに発生したエラー「UnicodeDecodeError」を解決する
Python
Published: 2018-08-12

目的

Python から CSV ファイルを読み込むとしたら下記のエラーが発生しました。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/anaconda3/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

このエラーの解決していきたいと思います。

ファイルを utf-8 で読み込むようにする

import csv

with open('data.csv', 'r', encoding="utf_8") as file:
    reader = csv.reader(file)

    for row in reader:
        print(row)

※ data.csv は自分が読み込みたいファイルに変更してください。

しかし、エラーが発生しました。

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "/anaconda3/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

ファイルを utf-8 に変換する

ここで nkf 「Network Kanji Filter」を使い文字コードを変換します。

まず nkf コマンドをインストールします。

(すでにインストールしている人はスキップしてください)

$ brew install nkf

文字コードを変換していきます。

# 現在の文字コードの確認
$ nkf -g hogehoge.csv
Shift_JIS

# 文字コードを UTF-8 に変換します
$ nkf -w --overwrite hogehoge.csv

# 変更後の文字コードの確認
$ nkf -g hogehoge.csv
UTF-8

文字コードが変わったあと、下記のコードを実行すると読み込むことができました。

import csv

f = open('hogehoge.csv', 'r')
dataReader = csv.reader(f)
for row in dataReader:
	print(row)
f.close()

参考