Pythonにおけるunicode decode errorに関する回避方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonにおけるunicode decode errorに関する回避方法について現役エンジニアが解説しています。ファイルの文字コードと、読み込みの際に指定している文字コードの種類が違うために、文字列に変換することが出来ない場合に生じるエラーです。エラーが出ないようにする方法を解説します。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

Pythonにおけるunicode decode errorに関する回避方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して、初心者向けに解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプ、Python講座の内容をもとに紹介しています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonにおけるunicode decode errorに関する回避方法について詳しく説明していくね!

大石ゆかり

お願いします!

この記事では、Pythonでファイルを読み込もうとしたときに表示されることのある、UnicodeDecodeErrorに対する対処方法について説明します。

文字コードとは?

ファイル読み込み時のUnicodeDecodeErrorを回避するためには、まず、文字コードについて学習しないといけません。

文字コードというのは、それぞれの文字に割り振られた識別用のコードのことで、コンピュータで文字を表現するときに必要になってきます。

コンピュータやファイルの種類によって文字コードは変わってくるので、ファイルの読み込みや、ファイルの保存の際に意識しておく必要があります。

文字コードの種類には、UnicodeやUTF-8、ASCIIやシフトJISなどがあります。

以下に、文字コードの例を載せておきます。

Pythonで使われている文字コードについて

 

decode errorとは?

decode errorというのは、文字コードで書かれたデータをPythonのstr型の文字列として読み込みたいときや、文字列の結合などのデータ加工がしたい場合などに、実際のファイルの文字コードと、ファイルの読み込みの際に指定している文字コードの種類が違うために、文字コードを文字列に変換することができないことで生じるエラーです。

例えば、UnicodeとUTF-8型の文字列を結合した場合などにはdecode errorが発生します。場合によっては次のコードはエラーが生じることがあります。

sample1 = u"Hello" #これはUnicode型
sample2 = "初めまして" #UTF-8のstr型
sample3 = sample1 + sample2

実行結果

UnicodeDecodeError: 'ascii' codec can't decode byte ...

などのようにUnicodeDeocdeErrorが生じてしまいます。

これは、sample2という文字列型の変数はUTF-8で記述されており、sample1ではUnicodeで記述されているため、2つの異なる文字コードによる文字列の結合がうまくいかないためです。

Python3ではエラーが大きく軽減されていますが、コードを実行していく中でエラーが出ることがあります。

[PR] Pythonで挫折しない学習方法を動画で公開中

unicode decode errorを回避するために正しい記述を理解する

上に挙げたような例の場合に、エラーを回避するためには、ファイルや文字列のエンコーディングを理解した上でコードを書く必要があります。

エラーが生じる原因として考えられるのは、読み込みたいファイルの文字コードのせいでエラーが出る場合、プログラムファイルの文字コードのせいでエラーがでる場合、コンピュータのデフォルト文字コードのせいでエラーが出る場合、など原因は複数あるので、すべての場合に適用できるような解決策はありませんが、主要な解決策について紹介します。

読み出したいファイルの文字コードが違う場合には、encodingを指定するのが良いです。例えば、

file = open(file, 'r', encoding="utf-8")

のように、関数の引数にencodingを指定すると良いでしょう。

Pythonのプログラムファイルの文字コードの設定を変える場合は、プログラムファイルの冒頭に、

# -*- coding: utf-8 -*-

という記述を書いておくと良いでしょう。

コンピュータの文字コードの場合は、使っているコンピュータごとに設定方法が異なってくるので調べて見てください。

以上、この記事ではPythonにおけるUnicodeDeocdeErrorについて解説しました。細かい説明は省いてしまったのですが、エラーが出た場合には参考にしてみてください。

監修してくれたメンター

小倉翔悟(おぐらしょうご)

AIプログラミングを使って開発を行う大学3年生。

プログラミング歴は約3年でPythonは割と得意。好きな物理理論は一般相対性理論で動物も好き。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間で、Pythonを使った人工知能(AI)や機械学習の基礎を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。