Могу ли я обойти 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.