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

Antwoord per e-mail aan