", position 268"错误-6ren"> ", position 268"错误-我在将 YAML 格式传输到 Python 字典对象时遇到“ Not Acceptable 字符 #x0095:特殊字符不允许出现在”,位置 25 中的错误消息。 可能的解决方案是什么? d = 't-6ren">
gpt4 book ai didi

python - Python yaml.load 中遇到 "unacceptable character #x0095: special characters are not allowed in "", position 268"错误

转载 作者:行者123 更新时间:2023-12-02 20:41:57 27 4
gpt4 key购买 nike

我在将 YAML 格式传输到 Python 字典对象时遇到“ Not Acceptable 字符 #x0095:特殊字符不允许出现在”,位置 25 中的错误消息。
可能的解决方案是什么?

d = 'tended (Journaled)"\n  - "\x95 Support plug and play"\n'
a = yaml.load(d)

要传输的字符串被删节了,不是正确的 YAML 格式,但我想在这种情况下它是无关紧要的。我正在使用 Python3

最佳答案

YAML specification明确指出 YAML 流仅使用 Unicode 字符集的可打印子集。除了 NEL (\x85),C1 控制 block 中的字符是不允许的(即字符 \x80-\x9F)。

这几乎是有效的 YAML:

d = 'tended (Journaled)"\n - " Support plug and play"\n'

你只需要一个 " 在它前面和 : 在 key 之后:

d = '"tended (Journaled)":\n - " Support plug and play"\n'

(虽然我不确定Journaled是不是英文正确)

以下不是 YAML:

d = '"tended (Journaled)":\n  - "\x95 Support plug and play"\n'

因为\x95在C1控制 block 中。您将不得不手动替换或删除这些字符。

ruamel.yaml 中没有太多可以帮助您转换此类非法字符的内容,但是您可以使用 Reader 的非法字符正则表达式来扫描非法字符并放下它们:

from ruamel.yaml import YAML
from ruamel.yaml.reader import Reader

yaml = YAML(typ='safe')


def strip_invalid(s):
res = ''
for x in s:
if Reader.NON_PRINTABLE.match(x):
# res += '\\x{:x}'.format(ord(x))
continue
res += x
return res

d = '"tended (Journaled)":\n - "\x95 Support plug and play"\n'

print(yaml.load(strip_invalid(d)))

给出:

{'tended (Journaled)': [' Support plug and play']}

无需任何进一步的人工干预。

如果你取消注释该行

        # res += '\\x{:x}'.format(ord(x))

你得到的输出:

{'tended (Journaled)': ['\x95 Support plug and play']}

关于python - Python yaml.load 中遇到 "unacceptable character #x0095: special characters are not allowed in "<unicode string >", position 268"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45871058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com