我正在使用minidom来解析xml文件,并且它抛出一个错误,指示数据格式不正确。我发现有些页面有像ไà¸à¹€à¸Ÿà¸¥ &
这样的字符,导致解析器打嗝。在开始解析文件之前,是否有一种简单的方法来清理文件?现在我正在使用常规表达式抛弃任何不是字母数字字符和</>
字符的东西,但它不是很有效。
答案 0 :(得分:3)
尝试
xmltext = re.sub(u"[^\x20-\x7f]+",u"",xmltext)
它将除去除0x20-0x7F范围之外的所有内容。
如果你想保留像tab,换行符这样的控制字符,你可以从\ x01开始。
xmltext = re.sub(u"[^\x01-\x7f]+",u"",xmltext)
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您确实需要包含奇怪字符的数据,而不是仅剥离它们,请将它们转换为XML解析器可以理解的代码。
您可以查看unicodedata包,尤其是规范化方法。
我自己没有使用它,所以我不能告诉你那么多,但如果你决定要转换并保存这些数据,你可以在这里再问一次。
>>> import unicodedata
>>> unicodedata.normalize("NFKD" , u"ไภเฟล &")
u'a\u03001\u201ea\u0300 \u0327 a\u03001\u20aca\u0300 \u0327Y\u0308a\u0300 \u0327\xa5 &'
答案 3 :(得分:0)
看起来你正在处理使用某种编码保存的数据“好像”它们是ASCII。 XML文件通常应该是UTF8,而SAX(minidom使用的底层解析器)应该处理它,因此在处理链的那一部分看起来有些不对劲。我没有专注于“清理”,而是首先尝试确保编码正确并正确识别。也许是一个破碎的XML指令?你能编辑你的Q来显示文件的前几行,特别是一开始的<?xml ...
指令吗?
答案 4 :(得分:-1)
我会丢弃所有非ASCII字符,可以通过设置第8位(0x80)来识别(128 .. 255分别为0x80 .. 0xff)。
您可以将文件读入名为old_str
的
然后结合filter
声明执行lambda
调用:
new_str = filter(lambda x: x in string.ascii_letters, old_str)
解析new_str
有许多方法可以完成从字符串中剥离非ASCII字符。