Я использую xml.sax со строками Unicode XML в качестве входных данных, первоначально введенных из веб-формы. На моей локальной машине (python 2.5, с использованием xmlreader по умолчанию, работает через механизм приложений), он работает нормально. Тем не менее, точно такой же код и строки ввода на серверах ядра производственных приложений терпят неудачу с «не правильно сформированными». Например, это происходит с кодом ниже:
from xml import sax
class MyHandler(sax.ContentHandler):
pass
handler = MyHandler()
# Both of these unicode strings return 'not well-formed'
# on app engine, but work locally
xml.parseString(u"<a>b</a>",handler)
xml.parseString(u"<!DOCTYPE a[<!ELEMENT a (#PCDATA)> ]><a>b</a>",handler)
# Both of these work, but output unicode
xml.parseString("<a>b</a>",handler)
xml.parseString("<!DOCTYPE a[<!ELEMENT a (#PCDATA)> ]><a>b</a>",handler)
в результате ошибки:
File "<string>", line 1, in <module>
File "/base/python_dist/lib/python2.5/xml/sax/__init__.py", line 49, in parseString
parser.parse(inpsrc)
File "/base/python_dist/lib/python2.5/xml/sax/expatreader.py", line 107, in parse
xmlreader.IncrementalParser.parse(self, source)
File "/base/python_dist/lib/python2.5/xml/sax/xmlreader.py", line 123, in parse
self.feed(buffer)
File "/base/python_dist/lib/python2.5/xml/sax/expatreader.py", line 211, in feed
self._err_handler.fatalError(exc)
File "/base/python_dist/lib/python2.5/xml/sax/handler.py", line 38, in fatalError
raise exception
SAXParseException: <unknown>:1:1: not well-formed (invalid token)
Любая причина, по которой парсер подсистемы приложений, который также использует python2.5 и expat, не будет работать при вводе юникода?