Найти - Пользователи
Полная версия: Проблемы с кодировкой и yaml
Начало » Python для новичков » Проблемы с кодировкой и yaml
1
jor77
Добрый день!
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>
Если оставить один русский, то работает нормально, но надо чтобы работало и то и то.
Подскажите, пожалуйста, как можно это победить?
py.user.next
#!/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]$
jor77
Спасибо! Работает!
Вот только не понимаю, почему работает, когда указываешь кодировку файла, но не работает, когда указываешь при дампе в yaml?
py.user.next
jor77
почему работает, когда указываешь кодировку файла
Это не из-за кодировки файла, а из-за параметра allow_unicode.
В третьем питоне всегда надо указывать кодировку при открытии файла.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB