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' codec can't encode character '\u2019' in position 434: ordinal not in range(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 代码点 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 编码。
我用的是python3.5.2,ruamel.yaml版本是0.17.16,
当我使用 ruamel_yaml.dump(content, fp)
时,出现错误
"UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 434: ordinal not in range(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 代码点 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 编码。