【发布时间】:2015-06-03 06:21:09
【问题描述】:
我正在使用 yaml 文件,这些文件必须是人类可读和可编辑的,但也可以通过 Python 代码进行编辑。 我正在使用 Python 2.7.3
文件需要处理重音符号(主要是处理法语文本)。
这是我的问题的一个示例:
import codecs
import yaml
file = r'toto.txt'
f = codecs.open(file,"w",encoding="utf-8")
text = u'héhéhé, hûhûhû'
textDict = {"data": text}
f.write( 'write unicode : ' + text + '\n' )
f.write( 'write dict : ' + unicode(textDict) + '\n' )
f.write( 'yaml dump unicode : ' + yaml.dump(text))
f.write( 'yaml dump dict : ' + yaml.dump(textDict))
f.write( 'yaml safe unicode : ' + yaml.safe_dump(text))
f.write( 'yaml safe dict : ' + yaml.safe_dump(textDict))
f.close()
写入的文件包含:
write unicode : héhéhé, hûhûhû
write dict : {'data': u'h\xe9h\xe9h\xe9, h\xfbh\xfbh\xfb\n'}
yaml dump unicode : "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"
yaml dump dict : {data: "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"}
yaml safe unicode : "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"
yaml safe dict : {data: "h\xE9h\xE9h\xE9, h\xFBh\xFBh\xFB"}
yaml 转储非常适合使用 yaml 加载,但它不是人类可读的。
正如您在示例代码中看到的,当我尝试编写 dict 的 unicode 表示时,结果是相同的(我不知道它是否相关)。
我希望转储包含带重音的文本,而不是 unicode 代码。 这可能吗?
【问题讨论】:
-
这是 Python 2 我猜?我在 Python 2 Unicode 处理方面不太坚定,但您可能想尝试
yaml.safe_dump,它以实现中性格式而不是 Python 特定格式转储数据。 -
哦,是的,对不起,它是 python 2.7.3,使用 safe_dump 有完全相同的输出。
标签: python unicode yaml non-ascii-characters pyyaml