我的python程序中出现此错误:ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
这个问题解释了这个问题。
解决方案是过滤掉某些字节,但我对如何进行这项工作感到困惑。
有什么帮助吗?
编辑:对不起,如果我没有提供足够的问题信息。字符串数据来自外部API查询,我无法控制数据的格式。

最佳答案

正如链接问题的答案所说,XML标准将有效字符定义为:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

将其转换为python:
def valid_xml_char_ordinal(c):
    codepoint = ord(c)
    # conditions ordered by presumed frequency
    return (
        0x20 <= codepoint <= 0xD7FF or
        codepoint in (0x9, 0xA, 0xD) or
        0xE000 <= codepoint <= 0xFFFD or
        0x10000 <= codepoint <= 0x10FFFF
        )

然后,您可以根据需要使用该函数,例如
cleaned_string = ''.join(c for c in input_string if valid_xml_char_ordinal(c))

10-05 23:32