Pyyaml 没有正确读取(非 ascii)字符(“§”)
Pyyaml not reading (non-ascii) character correctly ("§")
我有以下文件 (sample.yml
):
Key: §
当我尝试使用以下函数阅读它时:
import yaml
with open("sample.yml", "r") as f:
file = yaml.safe_load(f)
文件读取不正确:print(file)
returns
{'Key': '§'}
尽管我想避免转义序列,但有没有可以在这种情况下使用的转义序列?没有他们有办法吗?
我也试过在单引号('§'
)或双引号("§"
)中设置§
,但是,这并没有解决问题。此外,使用 yaml.load
而不是 yaml.safe_load
我正在使用 pyyaml v5.4.1
如何正确读取yaml文件?
您应该显式传递编码以确定:
with open(filepath, "r", encoding="utf-8") as f:
The default encoding is platform dependent (whatever locale.getpreferredencoding() returns).
这对于 3.10 仍然适用,但将来可能会更改并变为 utf-8
。
虽然您发布的输出看起来像您尝试将 UTF8 字符串读取或显示为 ASCII(特别是 Latin1)时得到的结果。在这种情况下,§
的 UTF8 字节表示是 0xC2 0xA7。 0xA7
也是 Latin1 中的字节值,所以字符最终显示为 §
我有以下文件 (sample.yml
):
Key: §
当我尝试使用以下函数阅读它时:
import yaml
with open("sample.yml", "r") as f:
file = yaml.safe_load(f)
文件读取不正确:print(file)
returns
{'Key': '§'}
尽管我想避免转义序列,但有没有可以在这种情况下使用的转义序列?没有他们有办法吗?
我也试过在单引号('§'
)或双引号("§"
)中设置§
,但是,这并没有解决问题。此外,使用 yaml.load
而不是 yaml.safe_load
我正在使用 pyyaml v5.4.1
如何正确读取yaml文件?
您应该显式传递编码以确定:
with open(filepath, "r", encoding="utf-8") as f:
The default encoding is platform dependent (whatever locale.getpreferredencoding() returns).
这对于 3.10 仍然适用,但将来可能会更改并变为 utf-8
。
虽然您发布的输出看起来像您尝试将 UTF8 字符串读取或显示为 ASCII(特别是 Latin1)时得到的结果。在这种情况下,§
的 UTF8 字节表示是 0xC2 0xA7。 0xA7
也是 Latin1 中的字节值,所以字符最终显示为 §