Armijn Hemel wrote: > beste Pythonettes, > > > het volgende is iets waarvan ik vrees dat het een beginnersiets is, maar > ik zit al de hele middag m'n hoofd erop te breken. > > Met PyExpat (uit xml.dom.ext.reader) trek ik een XML bestand uit elkaar, > met XPath. De resultaten hiervan bevatten karakters die niet in de standaard > ASCII karakterset zitten en waarvoor je allemaal extra toetsen nodig hebt, > die niet op mijn oude SGI toetsenbord met US layout zitten ;-) > > In ieder geval, ik wil die strings graag netjes geescapet hebben (het moet > namelijk een MySQL databeest in), maar MySQLdb.escape_string() vindt dat niet > echt lief: > > UnicodeEncodeError: 'ascii' codec can't encode character u'\xb2' in position > 101: ordinal not in range(128)
Wat dit betekent is dat je een unicode string hebt (dat klopt dus) en die probeert te encoden in een encoding die geen non-ascii karakters aan kan. Wat je in zo'n geval wilt doen is encoden naar een andere encoding door zoiets te doen als: output = jouwstring.encode('UTF-8') (die 'UTF-8' kan ook een andere encoding zijn natuurlijk, je moet even kijken wat je database wil hebben.) De ervaring leert met unicode en python dat het vrij goed gaat met de volgende regels: - decodeer input naar unicode op het vroegst mogelijke moment, dus direct als je form informatie binnenkrijgt bijvoorbeeld. (Soms handelt je applicatie framework dit al af, da's helemaal mooi.) - encodeer output op het laatst mogelijke moment. en werk verder altijd met unicode strings, dan doet python alles vanzelf goed. -- - eric casteleijn http://infrae.com _______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl