[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