首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pyyaml产生了不需要的!!python/unicode输出

pyyaml产生了不需要的!!python/unicode输出
EN

Stack Overflow用户
提问于 2013-12-03 21:43:17
回答 2查看 14.8K关注 0票数 29

我使用pyyaml将一个对象转储到一个文件。对象中有几个unicode字符串。我以前也这样做过,但现在它产生的输出项如下:

代码语言:javascript
复制
'item': !!python/unicode "some string"

而不是期望的:

代码语言:javascript
复制
'item': 'some string'

我打算输出为utf-8。我当前使用的命令是:

代码语言:javascript
复制
yaml.dump(data,file(suite_out,'w'),encoding='utf-8',indent=4,allow_unicode=True)

在其他位置,我执行以下操作,并且它工作正常:

代码语言:javascript
复制
codecs.open(suite_out,"w","utf-8").write(
    yaml.dump(suite,indent=4,width=10000)
)

我做错了什么?

Python 2.7.3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-04 15:57:40

我尝试了许多组合,我能找到的唯一一个始终生成正确的YAML输出的组合是:

代码语言:javascript
复制
yaml.safe_dump(data, file(filename,'w'), encoding='utf-8', allow_unicode=True)
票数 49
EN

Stack Overflow用户

发布于 2020-06-05 11:16:09

受到公认的答案的启发,即safe_dump可以产生预期的结果,我检查了python2.7/site-packages/yaml/representer.py的源代码,发现dumpRepresentersafe_dumpunicode使用了不同的表示函数。

并且可以用add_representer覆盖表示函数。因此,您可以只从SafeRepresenter获取表示函数,并注册它以便在dump中使用。

我必须这样做,因为我有一些自定义类型,所以我不能使用safe_dump

代码如下:

代码语言:javascript
复制
def represent_unicode(dumper, data):
    return dumper.represent_scalar(u'tag:yaml.org,2002:str', data)
yaml.add_representer(unicode, represent_unicode)

我生成输出的命令:

代码语言:javascript
复制
yaml.dump(yml, encoding='utf-8', allow_unicode=True, default_flow_style=False, explicit_start=True)

python版本是2.7.5,PyYMAL是3.10。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20352794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档