使用YAML转储unicode

时间:2017-07-24 13:12:02

标签: python unicode python-2.x ruamel.yaml

我在csv中创建了yaml文件,其中包含很多unicode字符但是我似乎无法在没有它的情况下转储unicode而没有给我一个解码错误。< / p>

我正在使用ruamel.yaml库。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 11: ordinal not in range(128)

我尝试过解析字符串,unicode字符串,使用&#34; utf-8&#34;进行编码。似乎没什么用。我已经看到很多例子显示添加一个代表来解决这个问题,但他们似乎都在使用旧的方法来解决问题,而我似乎无法在新方法中找到如何做到这一点记录在任何地方。

from ruamel.yaml import YAML

class YamlObject(YAML):
    def __init__(self):
        YAML.__init__(self)
        self.default_flow_style = False
        self.block_seq_indent = 2
        self.indent = 4
        self.allow_unicode = True

textDict = {"text": u"HELLO_WORLD©"}
textFile = "D:\\testFile.yml"
yaml = YamlObject()
yaml.dump(textDict, file(textFile, "w"))

我可以对整个字典进行unicode,这有效但但它并没有给我我需要的格式。

我需要的只是:

text: HELLO_WORLD©

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您在派生的encoding对象中遗漏了YAML

试试这样:

class YamlObject(YAML):
    def __init__(self):
        YAML.__init__(self)
        self.default_flow_style = False
        self.block_seq_indent = 2
        self.indent = 4
        self.allow_unicode = True
        self.encoding = 'utf-8'

如果您look at the definition of your base class, YAML,您会注意到默认情况下encoding未定义:

self.encoding = None

它通过YAML.dump()None保持YAML.dump_all()。相反,在全局dump()方法中,encoding设置为默认utf-8(仅限Python 2)。

<强>更新即可。这实际上是Python 2 ruamel.yaml中的一个错误(感谢@Anthon)。