Уведомления

Группа в Telegram: @pythonsu

#1 Июль 9, 2014 00:18:48

jor77
Зарегистрирован: 2014-06-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с кодировкой и yaml

Добрый день!
Python 3.3
Возникает следующая проблема:

# -*- coding: utf-8 -*-
import yaml
data = {'a' : ‘niedostępna’, ‘b’ : ‘недоступна’}
with open('файл', “w”) as file:
yaml.dump(data, file, default_flow_style=False, indent=4)
load_file = yaml.load(open('файл'))
print(load_file)

Результат:
{'a': ‘niedostępna’, ‘b’: ‘недоступна’}

То есть, видим, что используется польский и русский язык.
Работает нормально, но с одним небольшим “но” - в записанном файле видим:
a: “niedost\u0119pna”
b: “\u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430”

Хотелось бы в файле получить нормальную запись, потому что, как видите, совершенно нечитаемо.
Если делать:
yaml.dump(data, file, default_flow_style=False, indent=4, allow_unicode=True)
То получаем ошибку:
UnicodeEncodeError: ‘charmap’ codec can't encode character ‘\u0119’ in position 7: character maps to <undefined>
Если оставить один русский, то работает нормально, но надо чтобы работало и то и то.
Подскажите, пожалуйста, как можно это победить?

Отредактировано jor77 (Июль 9, 2014 00:19:22)

Офлайн

#2 Июль 9, 2014 02:08:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Проблемы с кодировкой и yaml

#!/usr/bin/env python3
 
import yaml
 
data = {'a': 'niedostępna', 'b' : 'недоступна'}
 
with open('file.txt', 'w', encoding='utf-8') as fout:
    yaml.dump(data, fout, indent=4,
              default_flow_style=False,
              allow_unicode=True)
 
with open('file.txt', encoding='utf-8') as fin:
    load_file = yaml.load(fin)
 
print(load_file)

[guest@localhost yml]$ ./yml.py 
{'b': 'недоступна', 'a': 'niedostępna'}
[guest@localhost yml]$ cat file.txt
a: niedostępna
b: недоступна
[guest@localhost yml]$



Отредактировано py.user.next (Июль 9, 2014 06:30:05)

Офлайн

#3 Июль 9, 2014 23:41:20

jor77
Зарегистрирован: 2014-06-29
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблемы с кодировкой и yaml

Спасибо! Работает!
Вот только не понимаю, почему работает, когда указываешь кодировку файла, но не работает, когда указываешь при дампе в yaml?

Офлайн

#4 Июль 10, 2014 00:03:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Проблемы с кодировкой и yaml

jor77
почему работает, когда указываешь кодировку файла
Это не из-за кодировки файла, а из-за параметра allow_unicode.
В третьем питоне всегда надо указывать кодировку при открытии файла.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version