🗿

【Python】JSON「UnicodeDecodeError: 'cp932'〜」のエラー処理について

2020/09/18に公開

起こったこと

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環境では、デフォルトで文字のコーディングが<span style="color: #ff0000"><b>cp932</b></span>になるようです。
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にするように修正しました。
すると無事動きました!!!

おわりに

大抵、こういった文字コードや環境構築で躓いちゃいますよね。。。。

Discussion