2012-03-06 60 views
2

我有一个Python脚本解析XML文件,并返回以下错误:我可以绕过Python中的UnicodeDecodeError吗?

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 614617: character maps to <undefined>

我敢肯定,因为有XML文档我试图内的一些非法字符的错误发生解析,但我无法直接修复这个特定的XML文件,我正在阅读。

我能否拥有它,以便这些字符不会让我的脚本绊倒,并允许它保持解析没有错误?

这是脚本达的部分读取XML并对其进行解码:

def ReadXML(self, path): 
    self.logger.info("Reading XML from %s" % path) 
    codec = "Windows-1252" 
    xmlReader = open(path, "r") 
    return xmlReader.read().decode(codec) 
+0

错误是否发生在xmlReader或您自己的代码中? – 2012-03-06 19:25:20

回答

7

当你调用decode(),你可以通过可选的errors说法。默认情况下,它被设置为strict(如果发现它无法解析的话会引发错误),但是您也可以将其设置为replace(用\ufffd替代有问题的字符)或ignore(这只会将有问题的字符)。

因此,这将是:

return xmlReader.read().decode(codec, errors='ignore') 

或任何级别选择。

更多信息可在Python Unicode HOWTO找到。

+0

我其实只是试过:'return xmlReader.read()。decode(编解码器,'忽略')'这似乎工作正常。这与你提到的一样吗? – bigmike7801 2012-03-06 19:23:47

+2

@ bigmike7801:如果你看[文档](http://docs.python.org/library/stdtypes.html#str.decode),你会发现第二个位置参数是'errors',所以是的,它是一样。阅读文档总是鼓励。 – 2012-03-06 19:25:48

相关问题