回答问题

我在我的 python 程序中收到此错误:ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

这个问题random text from /dev/random raise an error in lxml: All strings must be XML compatible: Unicode or ASCII, no NULL bytes解释了这个问题。

解决方案是过滤掉某些字节,但我对如何去做这件事感到困惑。

有什么帮助吗?

编辑:抱歉,如果我没有提供有关该问题的足够信息。字符串数据来自外部 api 查询,我无法控制数据的格式。

Answers

正如对链接问题的回答所说,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))
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐