在python中过滤掉某些字节
回答问题 我在我的 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 mus
·
回答问题
我在我的 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))
更多推荐
已为社区贡献126483条内容
所有评论(0)