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))
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…