[Python] Supporto ai caratteri accentati.

Marco Giusti marco.giusti a gmail.com
Gio 9 Maggio 2013 15:49:06 CEST


On Thu, May 09, 2013 at 10:21:39AM +0200, Diego Barrera wrote:
> Il 08/05/2013 19:17, Marco Giusti ha scritto:
> >On Wed, May 08, 2013 at 07:17:17PM +0200, Gollum1 wrote:
> >>ok... inserito:
> >>
> >># coding=utf-8
> >>
> >>come seconda riga, ed ora l'interprete lo esegue correttamente, anche
> >>senza mettere u davanti alle stringhe.
> >questo solo per un particolare allineamento planetario del sistema
> >solare
> Questa della codifica e' una cosa maledettamente oscura!

veramente non tanto. il problema è che non si sà in quale ambiente si
lavora e con quale locale. prendi questo esempio:

	# coding=utf-8

	print "città"

se si lavora con locale utf-8 tutto sembra funzionare ma nel momento in
cui il locale cambia, non funziona più. settando il locale di xterm ecco
quello che ottengo:

	cittÃ

questo perché le stringhe non sono altro che una sequenza di byte e
l'encoding ci dice solo come devono essere interpretate. prendi la
parola chance. per un italiano vuol dire probabilità di riuscita ma per
un francese vuol dire fortuna, la stessa parola ha due significati
differenti a seconda dell'interpretazione e lo stesso vale per le
stringhe.

la regola d'oro è lavorare sempre e solo con unicode dentro al programma
e tradurre opportunamente quando il programma interagisce con l'esterno.
qualcosa di simile.

	with open(filename) as fp:
		data = fp.read()
	data.decode(encoding)
	do_stuff_with(data)
	print data.encode(encoding)

in realtà qui lo dico e qui lo nego ma con questa regola non si può
sbagliare. per finire un paio di link illuminanti sull'argomento:

http://www.joelonsoftware.com/articles/Unicode.html
http://web.archive.org/web/20071019151008/http://boodebr.org/main/python/all-about-python-and-unicode#WHYNOPRINT

ciao
m.


Maggiori informazioni sulla lista Python