Discussione:
[Python] Supporto ai caratteri accentati.
unknown
2013-05-08 15:41:11 UTC
Permalink
domanda forse banale, vedo che nelle librerie si parla di utf8, ma a
livello di interprete, se nel codice ho una stringa che contiene una
lettere accentata, l'interprete esce con un errore.

esiste un qualche modo per indicare all'interprete che il file è in
utf8, e quindi può contenere (nelle stringhe naturalmente) caratteri
strani?

Byez
--
Gollum1
Tesssssoro, dov'é il mio tessssoro...
unknown
2013-05-08 15:57:18 UTC
Permalink
Da: "Gollum1" <gollum1.smeagol1 a gmail.com>
domanda forse banale, vedo che nelle librerie si parla di utf8, ma a
livello di interprete, se nel codice ho una stringa che contiene una
lettere accentata, l'interprete esce con un errore.

esiste un qualche modo per indicare all'interprete che il file è in
utf8, e quindi può contenere (nelle stringhe naturalmente) caratteri
strani?

GB: attenzione, momento quasi storico... Tento la mia prima risposta in lista!
Prova a mettere una u davanti alla stringa da passare:
u"Perchè così?"
u"Perchè di sì!"

Però è meglio che aspetti risposte da fonti più.... certe! :)
Ciao.
G

@Tutti:
PS: è considerato scorretto, infantile, stilisticamente off, usare emoticons nel contesto di questa lista?
unknown
2013-05-08 15:59:19 UTC
Permalink
2013/5/8 Gabriel Battaglia (Kriyaban) <iz4apu a libero.it>
Post by unknown
PS: è considerato scorretto, infantile, stilisticamente off, usare
emoticons nel contesto di questa lista?
Assolutamente sì! ;-)

È totalmente vietato! :-P

E se lo fai verrai fustigato! :-D

Ciao.
Marco.
P.S. :-))))
--
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130508/c61d8878/attachment.html>
unknown
2013-05-08 16:07:37 UTC
Permalink
Marco beri:
Assolutamente sì! ;-)

È totalmente vietato! :-P

E se lo fai verrai fustigato! :-D

Ciao.
Marco.
P.S. :-))))

GB: Ah, :D Ecco! Lo immaginavo, SOBSOB!!!
- "Battaglia! Dietro la lavagna!"

- "Ma prof? Noi abbiamo la lavagna a muro... appesa al muro!"

- "Appunto, dietro la lavagna!"
:O
unknown
2013-05-08 16:49:29 UTC
Permalink
Post by unknown
GB: attenzione, momento quasi storico... Tento la mia prima risposta in lista!
Rullo di tamburi... :)
Post by unknown
u"Perchè così?"
u"Perchè di sì!"
Questo è giusto, ma non basta. In che encoding è salvato il file? Se è
in latin1 la tua i accentata sarà rappresentata dal byte 0xEC; se è in
utf8 sarà la coppia di byte 0xC3 0xAC. Se non si conosce questa
informazione diventa difficile sapere chsa voglia dire 0xEC: per esempio
interpretata in un encoding russo (koi8-r) 0xEC rappresenta la lettera
"?" (la L maiuscola in cirillico). E così via, incasinando...

Il "commento magico" in cima ai sorgenti Python serve a specificare
cosa vogliono dire i caratteri con valore ascii > 127 nel sorgente.
Senza di quello toccherebbe tirare a indovinare (come fa Notepad,
regolarmente scazzando
<http://www.hoax-slayer.com/bush-hid-the-facts-notepad.html>) mentre
Python preferisce tirare un'eccezione nel dubbio.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
unknown
2013-05-08 16:58:40 UTC
Permalink
Post by unknown
Post by unknown
GB: attenzione, momento quasi storico... Tento la mia prima risposta in lista!
Rullo di tamburi... :)
Post by unknown
u"Perchè così?"
u"Perchè di sì!"
Questo è giusto, ma non basta. In che encoding è salvato il file? Se è in
latin1 la tua i accentata sarà rappresentata dal byte 0xEC; se è in utf8
sarà la coppia di byte 0xC3 0xAC. Se non si conosce questa informazione
diventa difficile sapere chsa voglia dire 0xEC: per esempio interpretata in
un encoding russo (koi8-r) 0xEC rappresenta la lettera "?" (la L maiuscola
in cirillico). E così via, incasinando...
Il "commento magico" in cima ai sorgenti Python serve a specificare cosa
vogliono dire i caratteri con valore ascii > 127 nel sorgente. Senza di
quello toccherebbe tirare a indovinare (come fa Notepad, regolarmente
scazzando <http://www.hoax-slayer.com/bush-hid-the-facts-notepad.html>)
mentre Python preferisce tirare un'eccezione nel dubbio.
il mio file risulta essere salvato in utf-8 (così almeno mi indica
kate, quando gli dico di salvare il file, e nelle sue impostazioni è
settato come set utf-8).

$file programma.py

Python script, UTF-8 Unicode text executable

quindi è utf-8 anche per il sistema.

se faccio partire l'interprete in konsole, e digito
Post by unknown
Post by unknown
print "questa è una prova"
questa è una prova

ottengo, quindi senza errori.

se in konsole lancio il mio programma.py:

$ ./programma.py
SyntaxError: Non-ASCII character '\xc3' in file ./programma.py

anche mettendo u davanti alla stringa.

ora vado a leggermi http://www.python.org/peps/pep-0263.html come è
suggerito nella riga che indica l'errore.
(non l'avevo notato prima di scrivervi)

Byez
--
Gollum1
Tesssssoro, dov'é il mio tessssoro...
unknown
2013-05-08 17:17:17 UTC
Permalink
ok... inserito:

# coding=utf-8

come seconda riga, ed ora l'interprete lo esegue correttamente, anche
senza mettere u davanti alle stringhe.

Grazie
Byez
--
Gollum1
Tesssssoro, dov'é il mio tessssoro...
unknown
2013-05-08 17:17:04 UTC
Permalink
Post by unknown
# 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
unknown
2013-05-09 08:21:39 UTC
Permalink
Post by unknown
Post by unknown
# 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!
unknown
2013-05-09 13:49:06 UTC
Permalink
Post by unknown
Post by unknown
Post by unknown
# 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.

unknown
2013-05-09 08:37:34 UTC
Permalink
Post by unknown
# coding=utf-8
Io metto sempre
# -*- coding: utf-8 -*-

Suppongo sia equivalente.

Walter
unknown
2013-05-08 17:18:53 UTC
Permalink
Da: "Daniele Varrazzo" <piro a develer.com>
Post by unknown
u"Perchè così?"
u"Perchè di sì!"
Questo è giusto, ma non basta. In che encoding è salvato il file? Se è in latin1 la tua i accentata sarà rappresentata dal byte
0xEC; se è in utf8 sarà la coppia di byte 0xC3 0xAC. Se non si conosce questa informazione diventa difficile sapere chsa voglia
dire 0xEC: per esempio interpretata in un encoding russo (koi8-r) 0xEC rappresenta la lettera "?" (la L maiuscola in cirillico). E
così via, incasinando...
Il "commento magico" in cima ai sorgenti Python serve a specificare cosa vogliono dire i caratteri con valore ascii > 127 nel
sorgente. Senza di quello toccherebbe tirare a indovinare (come fa Notepad, regolarmente scazzando
<http://www.hoax-slayer.com/bush-hid-the-facts-notepad.html>) mentre Python preferisce tirare un'eccezione nel dubbio.
Grazie Daniele... Gollum1 però parlava di interprete, non di script... Io pensavo, forse non comprendendo bene la sua richiesta, che
si riferisse a prove di codice da farsi al volo, direttamente a linea di comando... Contesto in cui, almeno penso, non si possa
indicare una codifica. O sbaglio?
Bye!
G.
unknown
2013-05-08 16:27:59 UTC
Permalink
Post by unknown
domanda forse banale, vedo che nelle librerie si parla di utf8, ma a
livello di interprete, se nel codice ho una stringa che contiene una
lettere accentata, l'interprete esce con un errore.
esiste un qualche modo per indicare all'interprete che il file è in
utf8, e quindi può contenere (nelle stringhe naturalmente) caratteri
strani?
"C'hai preso": se un sorgente non è ascii lo devi dichiarare in cima:
leggi

http://www.python.org/dev/peps/pep-0263/

Puoi usare:

# -*- coding: <encoding name> -*-

che piace a emacs, oppure

# vim: set fileencoding=<encoding name> :

che piace a vim.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
unknown
2013-05-08 16:39:39 UTC
Permalink
Post by unknown
esiste un qualche modo per indicare all'interprete che il file è in
utf8, e quindi può contenere (nelle stringhe naturalmente) caratteri
strani?
Ti hanno gia' detto tutto. Aggiungo che con Python 3.3 per default
l'encoding del sorgente
è utf-8:

http://docs.python.org/3/tutorial/interpreter.html#source-code-encoding

Non solo per i letterali, ma per tutto il sorgente, quindi anche nomi e
commenti:

$ more myfile.py
è = 33 # Questo è un commento
print(è)
$ python3.3 myfile.py
33
--
Marco Buttu

INAF Osservatorio Astronomico di Cagliari
Loc. Poggio dei Pini, Strada 54 - 09012 Capoterra (CA) - Italy
Phone: +39 070 71180255
Email: mbuttu a oa-cagliari.inaf.it

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130508/97c10ca9/attachment.html>
unknown
2013-05-08 16:47:57 UTC
Permalink
Post by unknown
Post by unknown
esiste un qualche modo per indicare all'interprete che il file è in
utf8, e quindi può contenere (nelle stringhe naturalmente) caratteri
strani?
Ti hanno gia' detto tutto. Aggiungo che con Python 3.3 per default
l'encoding del sorgente
Python 3, in generale
--
Marco Buttu

INAF Osservatorio Astronomico di Cagliari
Loc. Poggio dei Pini, Strada 54 - 09012 Capoterra (CA) - Italy
Phone: +39 070 71180255
Email: mbuttu a oa-cagliari.inaf.it

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130508/c260ce1c/attachment.html>
Loading...