「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 のことがよくあります。

対処

  1. 正しい encoding を指定して開く。
with open(path, encoding="cp932") as f: # Shift_JIS系。BOM付きUTF-8なら "utf-8-sig"
text = f.read()
  1. pandas なら encoding を渡す。
import pandas as pd
df = pd.read_csv(path, encoding="cp932")
  1. 文字コードが不明なら推定する。charset-normalizer などで判定できます。

  2. どうしても壊れた文字を無視して読むなら、最終手段として errors="replace" を使います(文字化けは残ります)。

まとめ

  • 原因は実際の文字コードと UTF-8 のズレ(多くは cp932)
  • open(path, encoding="cp932") のように明示する
  • pandas は read_csv(path, encoding="cp932")
  • BOM付きUTF-8は utf-8-sig、不明なら文字コード推定を使う