[Python] Ma python3 non doveva aver risolto il problema dell'unicode?

Manlio Perillo manlio.perillo a gmail.com
Mer 3 Lug 2013 16:27:59 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 02/07/2013 21:07, Gollum1 ha scritto:
> Il 02 luglio 2013 20:54, Manlio Perillo <manlio.perillo a gmail.com> ha scritto:
>>>         fi = open(file_name, "r")
>>
>> Devi aprire il file in modalità binaria, altrimenti Python assume che tu
>> voglia leggere del testo, ed ovviamente ti restituisce stringhe Unicode!
> 
> sì, ho provato a mettere "rb" e funziona perfettamente, o meglio... quasi...
> 
> ora mi trovo che l'ultima riga che leggo, che contiene il digest
> originale risulta essere:
> 
> b'4fcd6bb2a2afcc1b66172aca1f5dc864\n'
> 
> che naturalmente è diverso  dal digest calcolato:
> 
> 4fcd6bb2a2afcc1b66172aca1f5dc864
> 

Quando leggi una linea, Python restituisce anche '\n' alla fine della
stringa.

> anche se l'informazione che portano è la stessa... come passo dalla
> forma "binaria" a quella testuale?
> 
>>
>>>         lines = fi.readlines()
>>>         fi.close()
>>>
>>>         buffer_digest = hashlib.md5()
>>>         for line in lines:
>>
>> Questo è folle.
>> Leggere linea per linea è inefficiente, se devi fare l'hashing, e,
>> *soprattutto*, è inefficiente leggere tutto in una volta.
>>
>> Leggi un blocco alla volta usando fi.read(buf_size)
> 
> non posso, le informazioni mi servono divise per riga per altre
> elaborazioni.

Ho il vago sospetto che il concetto di "linea" non sia ben definito per
un file binario, e che tu potresti avere problemi se vuoi che il codice
sia portabile (prova a farlo girare su Windows).  Questo almeno per il
C, ma non so se Python supporti il concetto di linea anche per file binari.

> [...]


Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlHUNO8ACgkQscQJ24LbaUSExACeIgqyTwxScw+V33vsQvVWeGkJ
J6wAniO2XJn0FmeiUduqv5feiA4jvwer
=vVE+
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python