[ホーム] - [よく見るエラーメッセージ一覧] - ["UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 13: illegal multibyte sequence"の原因と対処]

【Python】"UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 13: illegal multibyte sequence"の原因と対処 | テキストファイルを読み込むサンプル





作成日:2022/03/06


Windows 11環境において Python3.x 上で read によりファイルを読み込もうとした場合、次のエラーで失敗する場合があります。


UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 13: illegal multibyte sequence



これは文字コードの問題でよく発生する問題です。
Windows 環境でPythonを実行した場合、デフォルトではMicrosoft の Shift-JIS (cp932)としてファイルを読み込みます。
しかし読み込もうとしたテキストファイルが UTF-8 の場合、このエラーが発生します。

open でファイルを読み込むときに明確に文字コードを UTF-8 で指定することによりUTF-8で作成されたテキストファイルを正常に読み込むことが可能です。

(注意)もし仮に文字コードの不一致が発生していても、テキストファイルでマルチバイトコード(日本語など) を使用していなければ本エラーは発生しないようです。



【間違い】

f = open('c:\\temp\\test.txt', 'r')

#ファイルを全て読み込む
buf = f.read()

#すべて書き出す
print(buf)

f.close()

Traceback (most recent call last):
File "c:\temp\test.py", line 5, in buf = f.read()
UnicodeDecodeError: 'cp932' codec can't decode byte 0x86 in position 13: illegal multibyte sequence

【正しい】

f = open('c:\\temp\\test.txt', 'r', encoding='UTF-8')

#ファイルを全て読み込む
buf = f.read()

#すべて書き出す
print(buf)

f.close()

テキストファイルの1行目
テキストファイルの2行目
テキストファイルの3行目


サンプルコード

以下は Windows 10 環境における正常実行可能なサンプルコードです。

テキストファイルを一括でバッファに読み込み、一気に出力するサンプルプログラムです。
サンプルコード:

f = open('c:\\temp\\test.txt', 'r', encoding='UTF-8')

#ファイルを全て読み込む
buf = f.read()

#すべて書き出す
print(buf)

f.close()


実行結果:

テキストファイルの1行目
テキストファイルの2行目
テキストファイルの3行目




ファイルを一括して読み込み、1行ごとに処理するサンプルです。
サンプルコード:

f = open('c:\\temp\\test.txt', 'r' , encoding='UTF-8')

#ファイルを全て読み込む
buf = f.readlines()

#1行ごと書き出す
for linedata in buf:
print(linedata)

f.close()

実行結果:

テキストファイルの1行目

テキストファイルの2行目

テキストファイルの3行目




ファイルを1行ごと読み込み出力するサンプルコードです。
サンプルコード:

f = open('c:\\temp\\test.txt', 'r' , encoding='UTF-8')

while True:

#1行ごと読み出す
linedata = f.readline()
if linedata == '':
break
print (linedata)

f.close()

実行結果:

テキストファイルの1行目

テキストファイルの2行目

テキストファイルの3行目








本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。)

[ホーム] - [よく見るエラーメッセージ一覧]