Eric Casteleijn wrote: >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 > > >------------------------------
Ik heb mij ook net druk gemaakt over encoding problemen. Een mooie, duidelijke en uitgebreide uitleg in het engels is te vinden op http://www.pyzine.com/Issue008/Section_Articles/article_Encodings.html Eric's regels hierboven zijn goud waard! Let op bij print statements en operaties waarbij strings gemanipuleerd worden, Python zal dan soms impliciet de string decoderen of coderen van/naar de standaard codering (bij jou waarschijnlijk ascii) groetjes, Tist Verdonck _______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl