【Python】UnicodeDecodeErrorの解決方法

こんにちは、にわこまです。

今回は、pythonでファイルを読み込もうとしたときに発生するunicodedecoderrorの解決方法を紹介します。ファイルはそれぞれの文字コードで保存されています。pythonで利用するには、pythonの文字コードに変換する必要があります。

 

本記事で扱うのは以下のエラーです。

「UnicodeDecodeError: ‘cp932’ codec can’t decode byte X in position Y: illegal multibyte sequence」

 

誤字脱字や分からない点、解決してほしい問題がありましたご連絡お願いいたします。

メールまたはTwittterのDMまで!

 

 

スポンサードサーチ


UnicodeDecodeErrorの解決方法

encodingにutf-8を設定する

 

「encoding=”utf-8”」とすることでunicodedecodeerrorを解決することができます。

 

そもそも「UnicodeDecodeError」とは、「文字コードを変換できません」というエラーです。

 

例えば、Aという文字コードとBという文字コードがあったとします。このときAの文字コードで割り当てられている英数字がBという文字コードには存在しないということです。

 

 

 

エラーのサンプルコード

エラーが発生するサンプルコードとその実行結果を以下に示します。また、読み込むテキストファイルを示します。

path = "unicodedecodeerror_cp932.txt"
with open(path, mode="r") as f:
    lines = f.readlines()

for line in lines:
    print(line, end="")

=== 実行結果 ===
Traceback (most recent call last):
  File "unicodedecodeerror_cp932.py", line 3, in <module>
    lines = f.readlines()
UnicodeDecodeError: 'cp932' codec can't decode byte 0x89 in position 13: illegal multibyte sequence
東京
埼玉
千葉
茨木
栃木
群馬
神奈川

 

上記のサンプルコードはテキストファイルの中身を1行ずつ表示するコードです。

 

テキストファイルとpythonファイルの文字コードが異なり、文字コードを変換できないためエラーが発生しました。

テキストファイルの文字コードは、「cp932(shift-jis)」です。

pythonファイルの文字コードは、「utf-8」です。

ファイルを読み込む際に、encodingをutf-8に設定することで解決できます。

 

エラーを解決したサンプルコードとその実行結果を以下に示します。

path = "unicodedecodeerror_cp932.txt"
with open(path, encoding="utf-8", mode="r") as f:
    lines = f.readlines()

for line in lines:
    print(line, end="")

=== 実行結果 ===
東京
埼玉
千葉
茨木
栃木
群馬
神奈川

  

 

まとめ

まとめの画像

今回は、pythonでファイルを読み込もうとしたときに発生するunicodedecodeerrorの解決方法を紹介しました。

異なる文字コードで保存されているファイルの扱いには気を付けましょう。

 

改めて解決方法を示します。

encodingにutf-8を設定する

 

解決してほしい問題などがありましたらメールまたはTwitterのDMまで!

 

 

最後までお読みいただきありがとうございます。


スポンサードサーチ