私が保存した辞書data
を持っています:
key
-イベントのID
value
-このイベントの名前。value
はUTF-8文字列です
次に、このマップをjsonファイルに書き留めます。私はこれを試しました:
with open('events_map.json', 'w') as out_file:
json.dump(data, out_file, indent = 4)
しかし、これは私にエラーを与えます:
UnicodeDecodeError: 'utf8'コーデックは位置0のバイト0xbfをデコードできません:無効な開始バイト
今、私も試しました:
with io.open('events_map.json', 'w', encoding='utf-8') as out_file:
out_file.write(unicode(json.dumps(data, encoding="utf-8")))
しかし、これは同じエラーを発生させます:
UnicodeDecodeError: 'utf8'コーデックは位置0のバイト0xbfをデコードできません:無効な開始バイト
私も試しました:
with io.open('events_map.json', 'w', encoding='utf-8') as out_file:
out_file.write(unicode(json.dumps(data, encoding="utf-8", ensure_ascii=False)))
しかし、これはエラーを発生させます:
UnicodeDecodeError: 'ascii'コーデックは、位置3114のバイト0xbfをデコードできません:順序が範囲外(128)
この問題を解決する方法についての提案はありますか?
編集:私はこれが私に問題を引き起こしている行であると信じています:
> data['142']
'\xbf/ANCT25'
編集2:data
変数はファイルから読み取られます。だから、ファイルからそれを読んだ後:
data_file_lines = io.open(file_name, 'r', encoding='utf8').readlines()
私はそれから:
with io.open('data/events_map.json', 'w', encoding='utf8') as json_file:
json.dump(data, json_file, ensure_ascii=False)
これは私にエラーを与えます:
TypeError:strではなくunicodeである必要があります
次に、データディクショナリでこれを実行しようとします。
for Tuple in sorted_tuples (the `data` variable is initialized by a Tuple):
data[str(Tuple[1])] = json.dumps(Tuple[0], ensure_ascii=False, encoding='utf8')
再び、次が続きます:
with io.open('data/events_map.json', 'w', encoding='utf8') as json_file:
json.dump(data, json_file, ensure_ascii=False)
しかし、再び、同じエラー:
TypeError: must be unicode, not str
ファイルからの読み取りに単純なopen
関数を使用すると、同じエラーが発生します。
data_file_lines = open(file_name, "r").readlines()
例外はdata
辞書の内容が原因です。少なくともoneのキーまたは値はnot UTF-8でエンコードされています。
この値を置き換える必要があります。 is UTF-8でエンコードされた値を代入するか、その値に対して正しいエンコードであるエンコードでその値のみをデコードすることにより、unicode
オブジェクトにデコードします。
data['142'] = data['142'].decode('latin-1')
代わりにその文字列をLatin-1でエンコードされた値としてデコードします。