[Python] python 3 cgi e lettere accentate

Gianluca Esposito giaespo a gmail.com
Lun 29 Lug 2013 11:31:33 CEST


Il giorno 29 luglio 2013 11:16, Roberto De Ioris <roberto a unbit.it> ha
scritto:

>
> > salve a tutti,
> > ho un problemino con le lettere accentate in una applicazione cgi dal
> > quale
> > non riesco ad uscire.
> > Questo è il mio banalissimo codice che non funziona!
> >
> > #!/usr/bin/python
> > # -*- coding: utf-8 -*-
> > s="<html><body><h1>àèìòù</h1></body></html>"
> >
> >
> > print("Content-Type: text/html;charset=UTF-8")
> > print('\n')
> > print(s)
> >
> > Nell'error.log di apache ho questo errore:
> > UnicodeEncodeError: 'ascii' codec can't encode characters in position
> > 16-20: ordinal not in range(128)
> >
> > Ovviamente tutto funziona se metto dei caratteri ascii al posto delle
> > lettere accentate
> >
> > La domanda è, se setto il coding del file e il charset http in utf-8 e le
> > stringhe in python3 sono in unicode, questo ascii codec da dove viene
> > fuori? c'è qualche modo (immagino semplice, data la mia ignoranza su
> > unicode e gli encoding in generale) per ovviare a questo e visualizzare
> > correttamente le lettere accentate e gli altri caratteri non in
> > range(128)?
> >
> > grazie a tutti,
> >
> > Gianluca Esposito
> > _______________________________________________
> > Python mailing list
> > Python a lists.python.it
> > http://lists.python.it/mailman/listinfo/python
> >
>
> Verifica che sia almeno python 3.2, su quelli prima il modulo cgi e' rotto
> (per risolvere dovresti chiudere a riaprire stdin/stdout/stderr con
> un'altra codifica, su google trovi sicuramente qualcosa)
>
>
> ok,
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
s="<html><body><h1>àèìòù</h1></body></html>"


print("Content-Type: text/html;charset=UTF-8")
print('\n')
print(s)

così funziona,
grazie Roberto

saluti
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130729/fa0b20f6/attachment-0001.html>


Maggiori informazioni sulla lista Python