【Python】JSONを開く際に、「UnicodeDecodeError: 'cp932' codec can't decode byte 0x85〜」 が出た時の処理について
起こったこと
Pythonが楽しくて、アウトプットとして自然言語処理100本ノックをやっていたとき。
Macで叩いたソースコードをGitHubに上げて、Windowsを触っていたときにgit cloneして動かそうと思ったのですが、
jsonファイルをただ読み込もうとした際に下記のようなエラーが発生しました。
for line in f: UnicodeDecodeError: 'cp932' codec can't decode byte 0x85(以下略)
????
環境
Macbook Python 3.8.0
Windows 10 Python 3.8.5
ソースコード
# coding: utf-8 import gzip import json #正規表現使うためのライブラリ import re def search_UK(): with gzip.open('chart3/jawiki-country.json.gz',mode='rt') as f: for line in f: json_load = json.loads(line) if json_load['title'] == 'イギリス': return json_load['text'] #findall(pattern, string) 正規表現にマッチする部分文字列を全て探しだしリストとして返します。 result = re.findall(r'^(.*\[\[Category:.*\]\].*)$',search_UK(),re.MULTILINE) for line in result: print(line)
調べたところ…
どうやらWindows環境では、デフォルトで文字のコーディングがcp932になるようです。
Pythonでは文字のエンコードを指定する際に、
# coding: utf-8
と書けばよく、Macではそのまま動いたのですが、Windowsではそうもいかなかったようです。
解決方法
jsonファイルを開いたあとの、for文でエラーが発生していたため
with gzip.open('chart3/jawiki-country.json.gz',mode='rt',encoding = 'utf-8') as f:
と開く段階で、utf-8にするように修正しました。
すると無事動きました!!!
おわりに
大抵、こういった文字コードや環境構築で躓いちゃいますよね。。。。