Как декодировать русский текст?
При выполнении кода, получаю YAML-файл:
"\u0422\u0443\u043B\u044C\u0441\u043A\u0438\u0439":
DustEpic: 0
DustLegendary: 0
DustRare: 0
EssenceEpic: 0
EssenceLegendary: 0
EssenceRare: 0
Ruby: 2
RunestoneEpic: 0
RunestoneLegendary: 0
RunestoneRare: 0
_GENERAL: 2
_TIMES: 1
Как выводить текст ("\u0422\u0443\u043B\u044C\u0441\u043A\u0438\u0439") на русском вместо Unicode?
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Даже если у вас файл прямо в таком виде, питон его прочитает нормально. Запишем прямо в таком виде в файл:
s = r'''"\u0422\u0443\u043B\u044C\u0441\u043A\u0438\u0439":
DustEpic: 0
DustLegendary: 0
DustRare: 0
EssenceEpic: 0
EssenceLegendary: 0
EssenceRare: 0
Ruby: 2
RunestoneEpic: 0
RunestoneLegendary: 0
RunestoneRare: 0
_GENERAL: 2
_TIMES: 1
'''
with open('test.yaml', 'w') as f:
f.write(s)
Проверим содержимое файла:
!cat test.yaml
"\u0422\u0443\u043B\u044C\u0441\u043A\u0438\u0439":
DustEpic: 0
DustLegendary: 0
DustRare: 0
EssenceEpic: 0
EssenceLegendary: 0
EssenceRare: 0
Ruby: 2
RunestoneEpic: 0
RunestoneLegendary: 0
RunestoneRare: 0
_GENERAL: 2
_TIMES: 1
Всё как у вас. Теперь прочитаем:
import yaml
with open("test.yaml", 'r') as stream:
data_loaded = yaml.safe_load(stream)
print(data_loaded)
Вывод:
{'Тульский': {'DustEpic': 0, 'DustLegendary': 0, 'DustRare': 0, 'EssenceEpic': 0, 'EssenceLegendary': 0, 'EssenceRare': 0, 'Ruby': 2, 'RunestoneEpic': 0, 'RunestoneLegendary': 0, 'RunestoneRare': 0, '_GENERAL': 2, '_TIMES': 1}}
Автор решения: MaxU
→ Ссылка
В дополнение к ответу @CrazyElf хотел бы напомнить, что в YAML можно записывать юникодные строки - тогда и при чтении сразу получим нормальный юникодный текст:
from yaml import safe_load, dump
data = {'Тульский': {'DustEpic': 0, 'DustLegendary': 0, 'DustRare': 0, 'EssenceEpic': 0, 'EssenceLegendary': 0, 'EssenceRare': 0, 'Ruby': 2, 'RunestoneEpic': 0, 'RunestoneLegendary': 0, 'RunestoneRare': 0, '_GENERAL': 2, '_TIMES': 1}}
with open("test.yaml", "w", encoding="utf-8") as file:
dump(data, file, allow_unicode=True)