「UnicodeDecodeError: 'utf-8' codec can't decode byte」の対処
結論を先に。ファイルが UTF-8 でないのに、UTF-8 として読もうとしているのが原因です。日本語環境では cp932(Shift_JIS)であることが多く、開くときに正しい encoding を指定すれば直ります。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte原因
open() や read_csv() は既定で UTF-8 として読みます。ファイルの実際の文字コードがそれと違うと、このエラーになります。Windows や日本語の CSV は cp932 のことがよくあります。
対処
- 正しい encoding を指定して開く。
with open(path, encoding="cp932") as f: # Shift_JIS系。BOM付きUTF-8なら "utf-8-sig" text = f.read()- pandas なら
encodingを渡す。
import pandas as pddf = pd.read_csv(path, encoding="cp932")-
文字コードが不明なら推定する。
charset-normalizerなどで判定できます。 -
どうしても壊れた文字を無視して読むなら、最終手段として
errors="replace"を使います(文字化けは残ります)。
まとめ
- 原因は実際の文字コードと UTF-8 のズレ(多くは cp932)
open(path, encoding="cp932")のように明示する- pandas は
read_csv(path, encoding="cp932") - BOM付きUTF-8は
utf-8-sig、不明なら文字コード推定を使う