У меня есть словарь data
, где я записал:
-
key
- идентификатор события -
value
- имя этого события, гдеvalue
- строка UTF-8
Теперь я хочу записать эту карту в json файл. Я пробовал с этим:
with open('events_map.json', 'w') as out_file:
json.dump(data, out_file, indent = 4)
но это дает мне ошибку:
UnicodeDecodeError: кодек 'utf8' не может декодировать байт 0xbf в позиции 0: недопустимый стартовый байт
Теперь я также пробовал:
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' не может декодировать байт 0xbf в позиции 0: недопустимый стартовый байт
Я также пробовал:
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 не может декодировать байт 0xbf в позиции 3114: порядковый номер не в диапазоне (128)
Любые предложения о том, как я могу решить эту проблему?
EDIT: Я считаю, что это линия, которая вызывает у меня проблему:
> 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: должен быть unicode, а не str
Затем я пытаюсь сделать это с помощью словаря данных:
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()