[Python] Ma python3 non doveva aver risolto il problema dell'unicode?
Manlio Perillo
manlio.perillo a gmail.com
Mar 2 Lug 2013 20:54:00 CEST
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Il 02/07/2013 20:06, Gollum1 ha scritto:
> ciao [],
>
> voglio calcolare l'md5 di un file (mi serve solo come firma, non
> come criptazione, quindi va benissimo l'md5)...
>
> uso il classico loop:
>
> 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!
> 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)
> buffer_digest.update(line)
> calculate_digest = buffer_digest.hexdigest()
>
> quando lo usavo su python 2.7 funzionava perfettamente, ora invece con
> python 3.2 ottengo il seguente errore:
>
> TypeError: Unicode-objects must be encoded before hashing
>
E' normale
> il bello è che il file è generato dallo stesso programma in un'altra
> parte, e anche in quell'occasione è firmato... ma non da errore... il
> codice è lo stesso...
>
In Python 2.x quando leggi da un file in modalità testo, vengono
restituite delle byte string.
Ciao Manli
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlHTIcgACgkQscQJ24LbaUTkowCfV3YME8i8fWOugXyF3ZbpeGdH
BXwAniQNdF0DUvTJQcu9IJfibZDK4ax+
=z30k
-----END PGP SIGNATURE-----
Maggiori informazioni sulla lista
Python