【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変換完了')

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




エンジニアのオンライン学習

ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。

おすすめオンライン教材
自宅で学習ができるオンラインスクール

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。



コメントを残す

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

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

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