【Python】UnicodeDecodeError: が発生した際の対処法


Pythonコードを書いている際にプログラムを実行すると「UnicodeDecodeError」が発生しました。

このようなエラーが発生する人は結構いるはず。
今回は、このエラーの対処法についてまとめました。

「UnicodeDecodeError: 」エラーが発生した際の対処法まとめ

今回は以下のようなプログラムをPythonで作成しました。
プログラムの内容は、取得したデータ「file.csv」の中身のデータを置換修正し、その後、そのCSVファイルを読み込み、データをエクセルへ出力するプログラムとなります。

import pandas as pd
import re

with open('file.csv', 'r', newline='') as file, \
        open('file_out.csv', 'w', newline='') as fileout:
   
        text = re.sub(r'\s* ', ',', file.read())
        print(text, file = fileout)
        print('置換完了')
  
# CSVファイルの読み込み
data = pd.read_csv('file_out.csv')
  
# Excel形式で出力
data.to_excel('excel-data.xlsx', encoding='utf-8')
 
print('CSV > Excel変換完了')

「UnicodeDecodeError: 」エラー内容

上記のプログラムを実行すると「UnicodeDecodeError:」が発生しました。

  File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 896, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 973, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 1105, in pandas._libs.parsers.TextReader._convert_column_data
  File "pandas/_libs/parsers.pyx", line 1158, in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas/_libs/parsers.pyx", line 1281, in pandas._libs.parsers.TextReader._convert_with_dtype
  File "pandas/_libs/parsers.pyx", line 1297, in pandas._libs.parsers.TextReader._string_convert
  File "pandas/_libs/parsers.pyx", line 1520, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte

このエラーは、’utf-8′ にデコードできないといわれ、実行が失敗しています。
原因としては、CSVファイルの読み込みが失敗しているようでした。


CSVファイルの読み込み時にエンコーディングを追加

うまくCSVが読み込めないところが原因となっているので、CSVファイルの読み込みは、「encoding=”shift-jis”」が必要になります。

以下は、csvファイルの読み込み時にエンコーディングの指定コードを追加しました。

data = pd.read_csv('file_out.csv', encoding='shift-jis')

また、以下でも問題ないです。

data = pd.read_csv(‘file_out.csv’, encoding='cp932′)

このcp932は、MicrosoftがShift-jisを独自に拡張した文字コードとなります。
今回はこちらを使用しています。

このコードを使用すると、「Shift-jis」で書かれたプログラムをUTF−8に変換して処理をしてくれます。
なので今回のエラーに対しても最も適したコードになると思います。

CSV読み込み時にエンコードを追加したプログラム

修正したコードは以下となります。

import pandas as pd
import re

with open('file.csv', 'r', newline='') as file, \
        open('file_out.csv', 'w', newline='') as fileout:
  
        text = re.sub(r'\s* ', ',', file.read())
        print(text, file = fileout)
        print('置換完了')
 
# CSVファイルの読み込み
data = pd.read_csv(‘file_out.csv’, encoding='cp932′)
 
# Excel形式で出力
data.to_excel('excel-data.xlsx', encoding='utf-8')

print('CSV > Excel変換完了')

これでエラーは解消されました。
該当のエラーが発生した際は参考にしてください。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!