«Специальные» символы (символы Unicode, отсутствующие в ASCII) являются допустимыми XML, поэтому вам действительно следует исправить свой синтаксический анализатор.Если это не сработает, пропустите ваш код через следующий фильтр:
#!/usr/bin/env python
import sys
input = sys.stdin.read().decode('UTF-8')
for c in input:
sys.stdout.write('&#%04d;' % ord(c) if c >= 128 else c)
Замените UTF-8
на кодировку документа.Сохраните приведенный выше код в xmlentities
и звоните как
python xmlentities <broken.xml >fixed.xml