2012-03-06 1 views
2

У меня есть питон скрипт, который при разборе файла XML и возвращает следующее сообщение об ошибке:Можно ли обойти UnicodeDecodeError в python?

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 или в вашем собственном коде? –

ответ

7

Когда вы звоните decode(), вы можете передать дополнительный аргумент errors. По умолчанию он установлен в strict (что вызывает ошибку, если находит что-то, что он не может разобрать), но вы также можете установить его на replace (который заменяет проблемный символ \ufffd) или ignore (который просто оставляет проблемный символ вне).

Так было бы:

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

или любого уровня вы выбираете.

Более подробную информацию можно найти в Python Unicode HOWTO.

+0

Я на самом деле просто попробовал: 'return xmlReader.read(). Decode (codec, 'ignore')' и это, похоже, отлично работает. Это то же самое, что вы упомянули? – bigmike7801

+2

@ bigmike7801: Если вы посмотрите на [документы] (http://docs.python.org/library/stdtypes.html#str.decode), вы увидите, что вторым позиционным параметром является 'errors', так что да, это тоже самое. Чтение документации всегда поощряется. –

 Смежные вопросы

  • Нет связанных вопросов^_^