Filtering out certain bytes in python

后端 未结 4 519
鱼传尺愫
鱼传尺愫 2020-12-31 04:12

I\'m getting this error in my python program: ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

This

4条回答
  •  攒了一身酷
    2020-12-31 04:44

    As the answer to the linked question said, the XML standard defines a valid character as:

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

    Translating that into 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
            )
    

    You can then use that function however you need to, e.g.

    cleaned_string = ''.join(c for c in input_string if valid_xml_char_ordinal(c))
    

提交回复
热议问题