python:os.path.exists()unicode异常

时间:2015-09-08 12:32:37

标签: python xml unicode

在我的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')

不幸的是,它没有用。

我不知道还有什么可能出错。请帮忙。

2 个答案:

答案 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)