Вот версия, которая переопределяет обработку строк PyYAML, всегда выводя unicode
. В действительности это, вероятно, тот же результат, что и в другом ответе, который я опубликовал, за исключением более короткого (т.е. вам все равно нужно убедиться, что строки в пользовательских классах преобразованы в unicode
или переданы unicode
строки самостоятельно, если вы используете пользовательские обработчики):
# -*- coding: utf-8 -*-
import yaml
from yaml import Loader, SafeLoader
def construct_yaml_str(self, node):
# Override the default string handling function
# to always return unicode objects
return self.construct_scalar(node)
Loader.add_constructor(u'tag:yaml.org,2002:str', construct_yaml_str)
SafeLoader.add_constructor(u'tag:yaml.org,2002:str', construct_yaml_str)
print yaml.load(u"""---
- spam
- eggs
- bacon
- crème brûlée
- spam
""")
(Выше приведено [u'spam', u'eggs', u'bacon', u'cr\xe8me br\xfbl\xe9e', u'spam']
)
Я не проверял его на LibYAML
(синтаксический анализатор на основе c), так как не смог его скомпилировать, поэтому оставлю другой ответ таким, какой он был.