我正在尝试将字符串转换为字典,但我想保留我的编码但是我会尽快
data = yaml.load(data)
它将其转换为utf编码。反正有没有在yaml.load模块中保存我的编码?
答案 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本身中的作用相同。