Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Diego Barrera

Il 20/06/2015 09:39, Marco Buttu ha scritto:

On 19/06/2015 17:56, Manlio Perillo wrote:

Documentati il prima possibile.
Ad esempio:
http://www.joelonsoftware.com/articles/Unicode.html


Ascolta il suggerimento di Manlio ;)

La codifica dei caratteri e' il pane quotidiano di un programmatore


Se il convento passa questo, bisogna adeguarsi :)


Morale della favola:

* impensabile non spendere qualche pomeriggio per studiare la codifica 
dei caratteri

* byte e testo non sono la stessa cosa
* Python 3 ha scelto la soluzione piu' pythonica per gestire la cosa

Avevo cominciato questo progetto con django e python3, ma non mi ricordo 
quale caspita
di pacchetto era compatibile solo con python2. Sara' per il prossimo o 
per un futuro aggiornamento.

Grazie mille della spiegazione
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Diego Barrera

Il 20/06/2015 11:38, Carlos Catucci ha scritto:


2015-06-20 11:25 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it 
mailto:diegonebarr...@yahoo.it:


Gia' sto un bel pezzo avanti, devo capire come includere questa
cosa nel mio codice..


Chiamasi refactoring. Se fai continuous integration e' una cosa 
quotidiana.

Stessa cosa se hai dei capi/committenti che non sanno cazzo vogliono.

Mal comune mezzo gaudio!
Ti sono vicino ;)

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Marco Buttu

On 19/06/2015 17:56, Manlio Perillo wrote:

2015-06-19 16:58 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it 
mailto:diegonebarr...@yahoo.it:


premesso che non ho mai capito come funziona la codifica dei
caratteri,


Documentati il prima possibile.
Ad esempio:
http://www.joelonsoftware.com/articles/Unicode.html


Ascolta il suggerimento di Manlio ;)

La codifica dei caratteri e' il pane quotidiano di un programmatore, per 
cui se non si capisce come funziona, prima di andare avanti ci si deve 
soffermare (un pomeriggio, due, quanto basta) per studiarla e capirla 
*sino in fondo*. E' veramente un concetto imprescindibile. La 
distinzione tra testo e byte che si ha in Python 3 viene spesso 
criticata, ma credo sia uno dei suoi maggiori punti di forza, ed è una 
scelta veramente Pythonica, in perfetto accordo con lo Zen di Python.


In Python 2 poi darmi una sequenza di byte come stringa:

   open('myfile', 'w').write('via 1\xf8 Maggio, 21') # Python 2

e io posso leggerla come testo, senza pormi alcun problema:

   open('myfile').read() # Python 2
  'via 1\xf8 Maggio, 21'

Questo non solleva eccezioni, e per chi non sa cosa sta sotto il 
passaggio da byte a testo (che qua non avviene, perche' in Python 2 e' 
un miscuglio) e viceversa, e' il comportamento desiderato, visto che Il 
mio programma gira, anche se ogni tanto mi saltano fuori caratteri 
strani. E infatti anche per questo abbiamo mojibake dietro ogni angolo.


In Python 3 la musica cambia. *Giustamente* i byte sono byte, e il testo 
e' testo, ovvero una sequenza di byte interpretata secondo una data 
codifica. Apro il file in lettura, e per default open() tira fuori il 
_testo_. Ma per poter ottenere testo da quella sequenza di byte, 
ovviamente deve poter sapere come interpretare tali byte. Per default 
ipotizza che voglio usare l'encoding impostato nella mia macchina (utf-8):


   open('myfile').read()
  Traceback (most recent call last):
   ...
  UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8...

Non e' utf-8. Se so cosa fare, lo faccio:

   open('myfile', encoding='cp850').read() # Grazie a Carlo ;)
  'via 1° Maggio, 21'

Se non ho idea di come il testo originale e' stato codificato, e non 
voglio provare ad indovinare, posso *esplicitamente* indicare di fare 
passare gli errori silenziosamente:


   open('myfile', errors='ignore').read()
  'via 1 Maggio, 21'

Explicit is better than implicit and Errors should never pass silently.

Morale della favola:

* impensabile non spendere qualche pomeriggio per studiare la codifica 
dei caratteri

* byte e testo non sono la stessa cosa
* Python 3 ha scelto la soluzione piu' pythonica per gestire la cosa

--
Marco Buttu

INAF-Osservatorio Astronomico di Cagliari
Via della Scienza n. 5, 09047 Selargius (CA)
Phone: 070 711 80 217
Email: mbu...@oa-cagliari.inaf.it

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Diego Barrera

Il 20/06/2015 11:25, Manlio Perillo ha scritto:
2015-06-20 11:22 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it 
mailto:diegonebarr...@yahoo.it:


Controlla che sia UTF-8, e se non lo è riporta un *chiaro* messaggio 
di errore.
Inoltre specifica che il file deve essere in UTF-8 anche nella 
documentazione del form HTML.




In realta' utilizzo django-model-form solo per validare i dati,
non per renderizzare dell'html.
In pratica il programma
1. legge un csv e infila i dati in un dizionario
2. da' il dizionario in pasto al django-model-form
3. il django-model-form valida i dati
4. se tutto e' andato a buon fine invoca il metodo save()

Siccome abbiamo vari clienti, ed ognuno manda un formato
diverso di csv, posso intervenire nel punto 1 perche' e' comunque
customizzato per ogni cliente.

Grazie 1k
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Marco Beri
On Jun 20, 2015 1:49 PM, Manlio Perillo manlio.peri...@gmail.com wrote:

 Ricorda che ogni volta che non usi UTF-8 per la codifica, un
programmatore perde i capelli a causa dello stress.

Ora capisco tutto...

--
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
http://beri.it/articoli/ - Qualche articolo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Diego Barrera

Il 19/06/2015 17:56, Manlio Perillo ha scritto:
2015-06-19 16:58 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it 
mailto:diegonebarr...@yahoo.it:


Ciao lista,
premesso che non ho mai capito come funziona la codifica dei
caratteri,


Documentati il prima possibile.
Ad esempio:
http://www.joelonsoftware.com/articles/Unicode.html


Grazie del link


La stringa viene letta e inserita in un django-model-form, poi
viene invocato il metodo save()
La stringa viene inviata da una macchina windows di un cliente
tramite csv


Non ho capito bene come viene inviata la stringa.
Il client invia il file così come è?
In questo caso c'è poco da fare, perchè non hai modo di conoscere 
l'encoding usato nel file (ma puoi cercare di indovinarlo).


Avevo chiesto esplicitamente alla software house di questo nostro 
cliente di utilizzare utf8...

la prendo con filosofia e colgo l'occasione per imparare una cosa nuova.
Grazie di nuovo

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Manlio Perillo
2015-06-20 11:59 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it:

 Il 20/06/2015 11:25, Manlio Perillo ha scritto:

 2015-06-20 11:22 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it
 mailto:diegonebarr...@yahoo.it:

 Controlla che sia UTF-8, e se non lo è riporta un *chiaro* messaggio di
 errore.
 Inoltre specifica che il file deve essere in UTF-8 anche nella
 documentazione del form HTML.


 In realta' utilizzo django-model-form solo per validare i dati,
 non per renderizzare dell'html.
 In pratica il programma
 1. legge un csv e infila i dati in un dizionario


Se ci dai più informazioni magari possiamo aiutarti a risolvere (o almeno
affrontare) il problema nel migliore dei modi.
Questo programma gira sul server o sul client? È un programma desktop?

Comunque anche se il programma gira sul PC del cliente, la soluzione più
solida è quella di forzare UTF-8, perchè anche
su Windows l'encoding di un file non può essere determinato con certezza
assoluta (puoi sapere l'encoding di sistema e/o
l'encoding della console, ma il programma che genera il file potrebbe usare
UTF-8 o UTF-16).

Ricorda che ogni volta che non usi UTF-8 per la codifica, un programmatore
perde i capelli a causa dello stress.


 [...]


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Diego Barrera

Il 20/06/2015 13:57, Marco Beri ha scritto:


On Jun 20, 2015 1:49 PM, Manlio Perillo manlio.peri...@gmail.com 
mailto:manlio.peri...@gmail.com wrote:


 Ricorda che ogni volta che non usi UTF-8 per la codifica, un 
programmatore perde i capelli a causa dello stress.


Ora capisco tutto...


ROTFL!
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Manlio Perillo
2015-06-20 11:22 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it:

 Il 19/06/2015 17:56, Manlio Perillo ha scritto:


  [...]

 Non ho capito bene come viene inviata la stringa.
 Il client invia il file così come è?
 In questo caso c'è poco da fare, perchè non hai modo di conoscere
 l'encoding usato nel file (ma puoi cercare di indovinarlo).

  Avevo chiesto esplicitamente alla software house di questo nostro
 cliente di utilizzare utf8...

la prendo con filosofia


No, non prenderla con filosofia.

Controlla che sia UTF-8, e se non lo è riporta un *chiaro* messaggio di
errore.
Inoltre specifica che il file deve essere in UTF-8 anche nella
documentazione del form HTML.


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Diego Barrera

Il 19/06/2015 18:23, Carlo Miron ha scritto:

2015-06-19 16:58 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it:

e sto usando Python 2.17.9, leggendo la stringa

Python 2.17.9 ??? :P


Quando me ne sono accorto gia' avevo spinto invia :D


Su un Python molto più vecchio, 2.7.9:

  print 'via 1\xf8 Maggio, 21'.decode('cp850')
 via 1° Maggio, 21

Gia' sto un bel pezzo avanti, devo capire come includere questa cosa nel 
mio codice..

grazie!
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Andrea D'Amore
2015-06-19 17:56 GMT+02:00 Manlio Perillo manlio.peri...@gmail.com:
 Documentati il prima possibile.
 Ad esempio:
 http://www.joelonsoftware.com/articles/Unicode.html

E in ambito Python-specifico vedi anche Unipain, video e presentazione:

http://nedbatchelder.com/text/unipain.html


-- 
Andrea
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Enrico Bianchi

On 06/19/2015 04:58 PM, Diego Barrera wrote:
premesso che non ho mai capito come funziona la codifica dei caratteri, 


Ho sempre amato questo: http://farmdev.com/talks/unicode/

Enrico
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Fabio T .
Il 20 giugno 2015 15:40:17 CEST, Enrico Bianchi enrico.bian...@ymail.com ha 
scritto:
On 06/19/2015 04:58 PM, Diego Barrera wrote:
 premesso che non ho mai capito come funziona la codifica dei
caratteri, 

Ho sempre amato questo: http://farmdev.com/talks/unicode/

Enrico
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Ottima presentazione, thanks for sharing!

Fabio
-- 
Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità.___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Simone Federici
Marco Beri:

  Ricorda che ogni volta che non usi UTF-8 per la codifica, un
 programmatore perde i capelli a causa dello stress.

 Ora capisco tutto...

posso essere l'eccezione che conferma la regola?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-20 Per discussione Gollum1
Il 20 giugno 2015 13:57:56 CEST, Marco Beri marcob...@gmail.com ha scritto:
On Jun 20, 2015 1:49 PM, Manlio Perillo manlio.peri...@gmail.com
wrote:

 Ricorda che ogni volta che non usi UTF-8 per la codifica, un
programmatore perde i capelli a causa dello stress.

Ora capisco tutto...

Quando ho letto quella frase ho proprio pensato a te... :)

Byez
-- 
Gollum1
Teoro, dov'è il mio teoro

Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli 
errori di battitura (maledetto correttore automatico).
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Che barba sta codifica!

2015-06-19 Per discussione Diego Barrera

Ciao lista,
premesso che non ho mai capito come funziona la codifica dei caratteri,
e sto usando Python 2.17.9, leggendo la stringa
via 1° Maggio, 21
ottengo il seguente errore:

raise DjangoUnicodeDecodeError(s, *e.args)
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xf8 in 
position 5: invalid start byte. You passed in 'via 1\xf8 Maggio, 21' 
(type 'str')


La stringa viene letta e inserita in un django-model-form, poi viene 
invocato il metodo save()

La stringa viene inviata da una macchina windows di un cliente tramite csv

Grazie mille
diego
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-19 Per discussione Carlo Miron
2015-06-19 17:56 GMT+02:00 Manlio Perillo manlio.peri...@gmail.com:

 2015-06-19 16:58 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it:
 e sto usando Python 2.17.9, leggendo la stringa

Python 2.17.9 ??? :P

 via 1° Maggio, 21
 ottengo il seguente errore:

 raise DjangoUnicodeDecodeError(s, *e.args)
 DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xf8 in position
 5: invalid start byte. You passed in 'via 1\xf8 Maggio, 21' (type 'str')

Su un Python molto più vecchio, 2.7.9:

 print 'via 1\xf8 Maggio, 21'.decode('cp850')
via 1° Maggio, 21

Ciao,
©

-- 
|:**THE BEER-WARE LICENSE** (Revision 42):
| mi...@python.it wrote this mail. As long as you retain
| this notice you can do whatever you want with this stuff.
| If we meet some day, and you think this stuff is worth it,
| you can buy me a beer in return.
|--Carlo Miron :
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Che barba sta codifica!

2015-06-19 Per discussione Manlio Perillo
2015-06-19 16:58 GMT+02:00 Diego Barrera diegonebarr...@yahoo.it:

 Ciao lista,
 premesso che non ho mai capito come funziona la codifica dei caratteri,


Documentati il prima possibile.
Ad esempio:
http://www.joelonsoftware.com/articles/Unicode.html


 e sto usando Python 2.17.9, leggendo la stringa

via 1° Maggio, 21
 ottengo il seguente errore:

 raise DjangoUnicodeDecodeError(s, *e.args)
 DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xf8 in position
 5: invalid start byte. You passed in 'via 1\xf8 Maggio, 21' (type 'str')

 La stringa viene letta e inserita in un django-model-form, poi viene
 invocato il metodo save()
 La stringa viene inviata da una macchina windows di un cliente tramite csv


Non ho capito bene come viene inviata la stringa.
Il client invia il file così come è?
In questo caso c'è poco da fare, perchè non hai modo di conoscere
l'encoding usato nel file (ma puoi cercare di indovinarlo).

Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python