Не уверен, были ли введены символы 'introduced' при вставке строки здесь,
но если они есть в исходных данных, то, похоже, это генератор
Проблема, которая представила \ uFFFD, характеризуется как:
"используется для замены входящего символа, значение которого неизвестно или
непредставим в Юникоде "
Цитируется из:
http://www.fileformat.info/info/unicode/char/fffd/index.htm
Обход? Просто идея для расширения:
good = True
buf = None
while True:
if good:
buf = f.read(buf_size)
else:
# try again with cleaned buffer
pass
try:
xp.Parse(buf, len(buf) == 0)
if (len(buf) == 0):
break
good = True
except ExpatError:
if xp.ErrorCode == XML_ERROR_BAD_CHAR_REF:
# look at ErrorByteIndex (or nearby)
# for 0xEF 0xBF 0xBD (UTF8 replacement char) and remove it
good = False
else:
# other errors processing
pass
Или очистить входной буфер вместо + угловых случаев (частичная последовательность в конце буфера).
Я не могу вспомнить, если экспат Python позволяет назначить пользовательский обработчик ошибок.
Тогда было бы проще.
Если я уберу твой образец из символов 'it's', он будет обработан нормально.
\ xd1 не дает сбоя.
данные OSM?