4
2

More than 1 year has passed since last update.

【Python】UnicodeDecodeError: 'cp932' codec can't decode byte 0x81...エラーの原因と解決方法

Posted at

概要

pandasencodingcp932に指定してCSVファイルを読み込むコードを実装していたら、以下のエラーが返されました。本記事ではこのエラーの原因と解決方法を記載します。

UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 2407: illegal multibyte sequence

上記は、文字列をデコードしようとした際に、'cp932'(Shift-JIS)というエンコーディング方式を使用した際に発生しています。

原因

UnicodeDecodeErrorは、指定されたエンコーディングに基づいてバイト列を文字列にデコードしようとしたときに、不正なマルチバイトシーケンスが見つかったことを意味するエラー。実際のファイルの文字コードと読み込み時に指定した文字コードが異なっているときに表示される変換エラーです。

0x81というバイト列はShift-JISエンコーディングにおいて特定の文字を表すために使用されていますが、Shift-JISのルールに従わない場合、デコードエラーが発生するのです。

以下のどちらかの場合が多いとのこと。
・テキストファイルや文字列が正しいエンコーディングで保存されていない
・ファイル内の特定のバイト列がエンコーディングに合致しない

エンコーディングについてややこしい点は、
・Mac環境でCSVファイルを作成する際のデフォルトのエンコーディングは、一般的にUTF-8
ですが、
・Windows環境でCSVファイルを作成する際のデフォルトのエンコーディングは、一般的にcp932(Shift-JIS)エンコーディングが多い
ということ。

なのでCSVデータが出力された環境によって適切に指定してあげる必要があります。

解決方法

・CSVファイル内の文字列データがUTF-8エンコードされている可能性が高いです。
 encodingutf-8にしてあげると解決しました。

csv_encoding = "utf-8"  # エンコーディングを指定
data = pd.read_csv(csv_file_path, encoding=csv_encoding)

ということで、Windows環境で作成されたCSVファイルをUNIX系環境やMac環境で扱う際には、エンコーディングの違いに注意する必要があるでしょう。

参考

【Python】UnicodeDecodeError: 'cp932' codec can't decodeの原因と解決方法

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2