如何在yaml.load()中设置ascii编码

时间:2015-03-23 13:04:58

标签: python-2.7 pyyaml

我正在尝试将字符串转换为字典,但我想保留我的编码但是我会尽快

data = yaml.load(data)

它将其转换为utf编码。反正有没有在yaml.load模块中保存我的编码?

1 个答案:

答案 0 :(得分:-1)

除非您的编码可以由BOM指定。默认情况下,yaml.load()需要' utf-8'编码字符串,如果传入类型str,虽然BOM可以强制它支持UTF-16。如果未指定BOM并且字符串仅包含ASCII字符,则返回类型str,或者键入unicode。如果你有特殊的字符,你应该把它们作为Unicode交给你,然后你得到unicode。

您应该从您拥有的格式解码为unicode,然后进行编码:

# coding: cp850

import ruamel.yaml as yaml

copyright = '\xb8'

print(u'{!r} {}'.format(copyright, copyright.decode('cp850')) )
y = yaml.load(copyright.decode('cp850'))
print(u'{} {}'.format(type(y), repr(y.encode('cp850'))))

会给你

'\xb8' ©
<type 'unicode'> '\xb8'

如果你经常这样做,只需在yaml.load()附近写一​​个包装。

我使用我的增强版PyYAML(ruamel.yaml)对此进行了测试,但这在PyYAML本身中的作用相同。