省エネ

Flutter、vue3修行中。

【Python勉強中】Windonws環境で日本語を含むjsonを読み込む

現在python勉強中です。
最終目標は機械学習がやりたい訳なのですが、機械学習系のスクリプトってpythonが使われる事が圧倒的に多いですよね。
なので、この機会にpython書けるようになりたいなと思い、簡単なプログラムを書いてみる活動を始めました。

使わせていただいたデータはこちらのポケモンjsonデータ。

github.com

その中でもとりあえず最初は少ないデータからと思い、types.jsonを使いました。
types.jsonをコピーしてローカルに保存します。
今回は、poke_type.jsonという名前で保存しました。
書いたスクリプトはこちら。

import json

# ファイルを開く
json_open = open('poke_type.json', 'r')

# 開いたファイルをJsonとして読み込む
json_load = json.load(json_open)

# 確認
print(json_load)

これを実行するとエラーになってしまいました。

UnicodeDecodeError: 'cp932' codec can't decode byte 0x83 in position 81: illegal multibyte sequence

ファイルをUTF8にしていてもWindowsを使っていると勝手にcp932にエンコードされるようです。
なので、スクリプトの7行目を以下のように修正しました。

import json

# ファイルを開く
json_open = open('poke_type.json', 'r',encoding="utf-8")

# 開いたファイルをJsonとして読み込む
json_load = json.load(json_open)

# 確認
print(json_load)

BOM付きの場合にはencoding="utf-8_sig"とする必要があるみたいです。

これで無事にjsonを読み込めたみたいです。

[{'english': 'Normal', 'chinese': '一般', 'japanese': 'ノーマル'}, {'english': 'Fighting', 'chinese': '格斗', 'japanese': 'かくとう'}, {'english': 'Flying', 'chinese': '飞行', 'japanese': 'ひこう'}, {'english': 'Poison', 'chinese': '毒', 'japanese': 'どく'}, {'english': 'Ground', 'chinese': '地上', 'japanese': 'じめん'}, {'english': 'Rock', 'chinese': '岩石', 'japanese': 'いわ'}, {'english': 'Bug', 'chinese': '虫', 'japanese': 'むし'}, {'english': 'Ghost', 'chinese': '幽灵', 'japanese': 'ゴースト'}, {'english': 'Steel', 'chinese': '钢', 'japanese': 'はがね'}, {'english': 'Fire', 'chinese': '炎', 'japanese': 'ほのお'}, {'english': 'Water', 'chinese': '水', 'japanese': 'みず'}, {'english': 'Grass', 'chinese': '草', 'japanese': 'くさ'}, {'english': 'Electric', 'chinese': '电', 'japanese': 'でんき'}, {'english': 'Psychic', 'chinese': '超能', 'japanese': 'エスパー'}, {'english': 'Ice', 'chinese': '冰', 'japanese': 'こおり'}, {'english': 'Dragon', 'chinese': '龙', 'japanese': 'ドラゴン'}, {'english': 'Dark', 'chinese': '恶', 'japanese': 'あく'}, {'english': 'Fairy', 'chinese': '妖精', 'japanese': 'フェアリー'}]

参考:

qiita.com