lisz-works

プログラミングと興味を貴方に

Python実行時エラー対処「UnicodeDecodeError: 'cp932' codec can't decode byte 0x83」

【スポンサーリンク】

Python

Python実行時に発生した「UnicodeDecodeError: 'cp932' codec can't decode byte 0x83」の対象についてです!

ちょっと無理くりな方法かも知れませんが、とりあえず対処できました。

エラーメッセージ

コンソールでpythonしようとすると、こんなエラーが出ていた。

D:\work\heroku\lztestpy>python
Python 3.6.6 |Anaconda 4.3.1 (64-bit)| (default, Jun 28 2018,
11:27:44) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Failed calling sys.__interactivehook__
Traceback (most recent call last):
File "C:\Users\lis\Anaconda3\lib\site.py", line 410, in register_readline
readline.read_history_file(history)
File "C:\Users\lis\Anaconda3\lib\site-packages\pyreadline\rlmain.py",
line 165, in read_history_file
self.mode._history.read_history_file(filename)
File "C:\Users\lis\Anaconda3\lib\site-packages\pyreadline\lineeditor\history.py",
line 82, in read_history_file
for line in open(filename, 'r'):
UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position
125: illegal multibyte sequence
>>>

エラー内容

C:\Users\lis\Anaconda3\lib\site-packages\pyreadline\lineeditor\history.py

これの82行目で発生しているらしい。

これです。

for line in open(filename, 'r'):

で、改めてエラーメッセージを見てみます。

UnicodeDecodeError: 'cp932' codec can't decode byte 0x83

ということで、どうやらこのエラーは文字コードが原因のものです。

「CP932」というのが、Windowsのデフォルト「Shift-JIS」ですね。 でUnicodeのデコードエラーとなっています。

恐らくPythonの関係なので、UTF-8のものを開こうとする。 しかしエンコーディングの指定がないので、Windows的には「Shift-JIS(CP932)」で開こうとする。

コンソール:「なんか変なんだけど!うまく開けないんだけど!」

という感じになっているものと思われる。

対処

ということで対処です。

エラーが発生していた箇所であるopen()に、エンコーディングを設定してあげます。

for line in open(filename, 'r', encoding="utf-8"):

これでPythonを実行してみると……

D:\work\heroku\lztestpy>python
Python 3.6.6 |Anaconda 4.3.1 (64-bit)| (default, Jun 28 2018,
11:27:44) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

エラーでなくなった!

とはいえ、決め打ちでUTF-8を指定してしまっているので、これが正しいかは不明です。

あとがき

Python実行時に出る文字コードエラーの対処についてでした!

ちょっと無理くりな感じですが……

とりあえずまぁ大丈夫でしょう。

コレをやったことによる弊害が出たら、ちょっと別途検討しよと思いますー。