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:

来自open's documentation

The default encoding is platform dependent (whatever locale.getpreferredencoding() returns).

这对于 3.10 仍然适用,但将来可能会更改并变为 utf-8

虽然您发布的输出看起来像您尝试将 UTF8 字符串读取或显示为 ASCII(特别是 Latin1)时得到的结果。在这种情况下,§ 的 UTF8 字节表示是 0xC2 0xA7。 0xA7 也是 Latin1 中的字节值,所以字符最终显示为 §