Могу ли я обойти UnicodeDecodeError в python? - PullRequest
2 голосов
/ 06 марта 2012

У меня есть сценарий 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 Ответ

7 голосов
/ 06 марта 2012

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

Таким образом, это будет:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...