J'utilise xml.sax avec des chaînes Unicode de XML en entrée, entrées à l'origine à partir d'un formulaire Web. Sur ma machine locale (python 2.5, en utilisant l'expat xmlreader par défaut, en passant par le moteur de l'application), cela fonctionne très bien. Cependant, le même code et les mêmes chaînes d'entrée sur les serveurs de moteur d'application de production échouent avec "pas bien formé". Par exemple, il se produit avec le code ci-dessous:Analyse XML Unicode avec Python SAX sur 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)
entraînant l'erreur:
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)
Toute raison pour laquelle l'analyseur de moteur de l'application, qui utilise également python2.5 et expat, échouerait lors de l'entrée unicode ?
Vous avez raison, en passant dans original_string.encode ('utf-8') résout le problème. Bizarre que l'analyseur standard permette de passer unicode droit. –