我在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©
我该怎么做?
答案 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)。