【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という文字コードには存在しないということです。
Python UnicodeDecodeErrorの公式ドキュメントはこちら
エラーのサンプルコード
エラーが発生するサンプルコードとその実行結果を以下に示します。また、読み込むテキストファイルを示します。
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まで!
最後までお読みいただきありがとうございます。
スポンサードサーチ