[英]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.