在我的python程序中,我使用untangle
来解析XML文件:
from untangle import parse
parse(xml)
XML以utf-8编码,包含非ASCII字符。在我的程序中,这会造成麻烦。当xml字符串传递给untangle
时,它会尝试智能并自动检查它是否是文件名。所以它调用
os.path.exists(xml)
看起来os
模块试图将其转换回ascii并导致以下异常:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 169-172: ordinal not in range(128)
在这个文件的顶部,我这样做是为了解决这个问题:
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
不幸的是,它没有用。
我不知道还有什么可能出错。请帮忙。
答案 0 :(得分:0)
有点奇怪,解开不会为此提供直接功能。
最简单的解决方案是将untangle.parse
的相关实现复制到解析文件:
def parse_text (text):
parser = untangle.make_parser()
sax_handler = untangle.Handler()
parser.setContentHandler(sax_handler)
parser.parse(StringIO(content))
return sax_handler.root
答案 1 :(得分:0)
解码对您的情况有帮助,如下所示?重新加载sys并将utf-8设置为默认值不是一个好习惯。
from untangle import parse
xml=isinstance(xml, str) and xml.decode("utf-8") or xml
parse(xml)