Python UTF-8 XML-синтаксический анализ (SUDS): удаление «недопустимого токена»

Вот типичная ошибка при работе с UTF-8 - «недопустимые токены»

В моем примере это происходит из-за работы с поставщиком услуг SOAP, у которого отсутствие уважения к символам Юникода, просто усечение значений до 100 байтов и игнорирование того, что 100-й байт может находиться в середине многобайтового символа: например:

<name xsi:type="xsd:string">浙江家庭教会五十人遭驱散及抓打 圣诞节聚会被断电及抢走物品(图、视频\xef\xbc</name>

Последние два байта - это то, что осталось от 3-байтового Юникода символ, после ножа усечения предполагается, что в мире используются 1-байтовые символы. Следующая остановка, синтаксический анализатор саксофона и:

xml.sax._exceptions.SAXParseException: <unknown>:1:2392: not well-formed (invalid token)

Меня больше не волнует этот персонаж. Его следует удалить из документа и позволить синтаксическому анализатору sax работать.

Ответ XML действителен во всех остальных отношениях, кроме этих значений.

Вопрос: Как удалить этот символ без анализа всего документа и повторного изобретения кодировки UTF-8 для проверки каждого байта?

Использование: Python + SUDS

6
задан FlipMcF 19 July 2013 в 02:44
поделиться