Yaml 从文件中安全加载特殊字符 °

Lau*_*nol 2 python yaml pyyaml

我正在尝试使用 PyYAML 读取 yml 配置文件。请参阅下面此类文件的示例。所需字段可能包含特殊字符,例如\xc2\xb0。下面示例中的结果字符串不是所需的\xc2\xb0C,而是\xc3\x82\xc2\xb0C.

\n\n

目标只是阅读\xc2\xb0C。我可以控制配置文件,因此转义或引用不是问题。之后也可以进行解码、替换或其他操作,但它们也应该适用于没有特殊字符的字符串和具有其他特殊字符的字符串。

\n\n

然而到目前为止,我在这条路上还没有取得成功。

\n\n

例子

\n\n

测试.yml

\n\n
super_important_variable: \xc2\xb0C\n
Run Code Online (Sandbox Code Playgroud)\n\n

代码

\n\n
import yaml\nwith open(\'test.yml\', \'r\') as open_yml:\n    print(yaml.safe_load(open_yml))\n
Run Code Online (Sandbox Code Playgroud)\n\n

当前结果

\n\n
{\'super_important_variable\': \'\xc3\x82\xc2\xb0C\'}\n
Run Code Online (Sandbox Code Playgroud)\n\n

期望的结果

\n\n
{\'super_important_variable\': \'\xc2\xb0C\'}\n
Run Code Online (Sandbox Code Playgroud)\n\n

奇怪的是,这会返回正确的结果:

\n\n
import yaml\nyml_str = "super_important_variable: \xc2\xb0C"\nyaml.safe_load(yml_str)\n\n> {\'super_important_variable\': \'\xc2\xb0C\'}\n
Run Code Online (Sandbox Code Playgroud)\n

oli*_*x14 6

尝试这个:

import yaml
with open('test.yaml', 'r', encoding='utf-8') as open_yml:
    print(yaml.safe_load(open_yml))
Run Code Online (Sandbox Code Playgroud)

有关 python 中的编码和文件的更多信息,请参阅:Unicode (UTF-8) Reading andwriting to files in Python