Могу ли я обойти UnicodeDecodeError в python?

У меня есть сценарий Python, который анализирует файл XML и возвращает следующую ошибку:

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)

1 ответ

Решение

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

Так было бы:

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

или любой другой уровень, который вы выберете.

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

Другие вопросы по тегам