[Python] encode caratteri accentati

Manlio Perillo manlio_perillo a libero.it
Lun 26 Mar 2007 13:21:21 CEST


Valentina Marotto ha scritto:
> salve,
> premessa:
> versione python 2.4 (sia su windows che su linux)
> 
> ho un problema con l'encode di caratteri accentati nel caso di 
> inserimento di dati nel database (creato con uno script python) e della 
> loro lettura.
> 
> i dati sono inseriti nel db tramite un form html e visualizzati in form 
> html per permetterne la modifica.
> 
> il problema e' che se insersico caratteri accentati li accetta (a volte) 
> ma nella visualizzazione per la modifica non li accetta (nella pagina 
> visualizza delle A seguite da numeretti ma nei campi del form non le 
> visualizza per niente).
> 
> ho provato di tutto:
> stringa.encode('nomeencoding') prima dell'inserimento in database,
> # -*- coding: iso-8859-1 -*- all'inizio di ogni script
> file sitecustomize.py (con sys.setdefaultencoding ('..') importato nei 
> vari script
> 
> in alcuni casi mi da l'errore che 'ascii' non puo' decodificare quei 
> caratteri.
> 
> ho provato qualsiasi tipo di encoding...
> 

L'encoding non si sceglie a caso!

Innanzitutto devi ricavare l'encoding usato dal browser che ti manda i dati.
Come ricavare questo dato dipende dalla libreria che usi.

Fatto questo, quello che devi fare è:
stringa.decode('nomeencoding')
per convertire la stringa in Unicode.

A questo punto devi vedere che tipo di encoding supporta il database.
Di solito puoi passare (e ricevere) stringhe Unicode, quindi non ci sono 
problemi.

Infine, quando prelevi le stringhe dal database per poi visualizzarle, 
devi codificarle usando l'encoding che usi per la tua pagina HTML.
Se il database ti passa stringhe Unicode, basta fare
stringa.encode('nomeencoding').



Saluti  Manlio Perillo


Maggiori informazioni sulla lista Python