繁体   English   中英

ruamel.yaml 0.17.16 python3 UnicodeEncodeError

[英]ruamel.yaml 0.17.16 python3 UnicodeEncodeError

我使用python3.5.2,ruamel.yaml版本是0.17.16,当我使用ruamel_yaml.dump(content, fp) ,出现错误

“UnicodeEncodeError:‘ascii’编解码器无法对位置 434 中的字符‘\’’进行编码:序号不在范围内(128)”

在 ruamel/yaml/emitter.py write_comment 函数上。

我设置了ruamel_yaml.encoding = True ,当读取文件时我也设置了 encoding='UTF-8',它不起作用。

然后我改成python3.7,没有UnicodeEncodeError错误,但是我发现生成的文件有错误的'utf-8'错误。

ruamel.yaml 需要匹配哪个python 版本吗? 或者如何解决这个问题?

我不知道为什么你在不同的 Python 版本中没有得到错误和不同的结果。 AFAICT 在处理文件方面没有任何 3.5 或 3.7 特定的内容。 尽管生命周期结束的 Python 3.5 仍受支持和测试。

您没有提供太多代码(您应该提供),但是从错误中我可以告诉您尝试使用正确的单引号 ( ' , Unicode code point 2019) 转储某些内容。

您应该包含更多代码,以便清楚文件的打开方式,并包含您运行代码的平台 (Windows)。 您最有可能写入文本文件( open('somefile.yaml') ),您应该在其中写入为二进制文件打开的文件( open('somefile.yaml', 'wb')

默认情况下, YAML()实例已经将属性.encoding设置为utf-8 ,因此再次设置将不起作用。

import sys
import pathlib
import ruamel.yaml

data = dict(text="here comes the unicode quote -> \u2019")
print('python version:', sys.version_info)

yaml = ruamel.yaml.YAML()
yaml_file = pathlib.Path('somefile.yaml')

# You can open the Path like this, but it is better to have ruamel.yaml do it
# with yaml_file.open('wb') as fp:
#     yaml.dump(data, fp)

yaml.dump(data, yaml_file)

readback = yaml_file.read_bytes()
print('{:02x}{:02x}{:02x}'.format(readback[-4], readback[-3], readback[-2]))

这使:

python version: sys.version_info(major=3, minor=5, micro=9, releaselevel='final', serial=0)
e28099

这是右单引号的预期 UTF-8 编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM