<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">Il giorno 29 luglio 2013 11:16, Roberto De Ioris <span dir="ltr"><<a href="mailto:roberto@unbit.it" target="_blank">roberto@unbit.it</a>></span> ha scritto:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5"><br>
> salve a tutti,<br>
> ho un problemino con le lettere accentate in una applicazione cgi dal<br>
> quale<br>
> non riesco ad uscire.<br>
> Questo è il mio banalissimo codice che non funziona!<br>
><br>
> #!/usr/bin/python<br>
> # -*- coding: utf-8 -*-<br>
> s="<html><body><h1>àèìòù</h1></body></html>"<br>
><br>
><br>
> print("Content-Type: text/html;charset=UTF-8")<br>
> print('\n')<br>
> print(s)<br>
><br>
> Nell'error.log di apache ho questo errore:<br>
> UnicodeEncodeError: 'ascii' codec can't encode characters in position<br>
> 16-20: ordinal not in range(128)<br>
><br>
> Ovviamente tutto funziona se metto dei caratteri ascii al posto delle<br>
> lettere accentate<br>
><br>
> La domanda è, se setto il coding del file e il charset http in utf-8 e le<br>
> stringhe in python3 sono in unicode, questo ascii codec da dove viene<br>
> fuori? c'è qualche modo (immagino semplice, data la mia ignoranza su<br>
> unicode e gli encoding in generale) per ovviare a questo e visualizzare<br>
> correttamente le lettere accentate e gli altri caratteri non in<br>
> range(128)?<br>
><br>
> grazie a tutti,<br>
><br>
> Gianluca Esposito<br>
</div></div><div class="im">> _______________________________________________<br>
> Python mailing list<br>
> <a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
> <a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
><br>
<br>
</div>Verifica che sia almeno python 3.2, su quelli prima il modulo cgi e' rotto<br>
(per risolvere dovresti chiudere a riaprire stdin/stdout/stderr con<br>
un'altra codifica, su google trovi sicuramente qualcosa)<br>
<span class=""><font color="#888888"><br>
</font></span><br></blockquote><div>ok,<br>#!/usr/bin/python<br># -*- coding: utf-8 -*-<br>import sys<br>import codecs<br>sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())<br>s="<html><body><h1>àèìòù</h1></body></html>"<br>
<br><br>print("Content-Type: text/html;charset=UTF-8")<br>print('\n')<br>print(s)<br><br></div><div>così funziona, <br></div><div>grazie Roberto<br><br></div><div>saluti <br></div></div><br></div></div>