[python-nl] unicode barf

eric casteleijn eric at infrae.com
Thu Dec 21 18:54:26 CET 2006


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


More information about the Python-nl mailing list