Използвам xml.sax с unicode низове от XML като вход, първоначално въведен от уеб формуляр. На моята локална машина (python 2.5, използвайки xmlreader expat по подразбиране, работещ през app engine), работи добре. Въпреки това, абсолютно същият код и входни низове на производствени сървъри на машина за приложения се провалят с „недобре оформени“. Например, това се случва с кода по-долу:
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, ще се провали при въвеждане на unicode?