[Python] Problemi con l'encoding/decoding dei locales

Daniele Varrazzo piro a develer.com
Mer 1 Ott 2008 16:02:17 CEST



On Wed, 01 Oct 2008 14:33:23 +0200, michele a nectarine.it wrote:

> Ok, il problema nasce dal fatto che se all'encoder passo una stringa  
> fatta in questo modo, python si lamenta:
> 
> input = open('foo.img','rb').read()
> 
> Traceback (most recent call last):
>    File "testing.py", line 32, in <module>
>      d = encoder.encode(input)
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xdc in position  
> 6: ordinal
> not in range(128)

Cos'e' "encoder" alla riga 32 di testing.py?

Tanto per chiarirci, anche se i codec del python sono generice
trasformazioni biunivoche, quando si parla di testo di solito si intende:

- encode: da unicode a str (es. iso-8859-1 o utf8)
- decode: da str a unicode.

Quindi, se testing.py sta provando a fare un "encode" sta in effetti
aspettando un unicode (come tu gli passi). Se non ottieni il risultato
atteso e' probabilmente perche' questo oggetto "encoder" non encoda allo
stesso modo di come tu hai effettuato il "decode" dopo aver letto il file.
A meno che l'encoder non sia qualcosa di "strano" (es. un compressore):
come e' costruito quell'encoder?

La cosa curiosa e' pero' la presenza di questa operazione
"encoder.encode(input)" che fa da filtro. Che ci fa li'? Guardando il
messaggio di errore sembra un encoder ascii, il che vuol dire che non sa
lavorare con caratteri > 127: sicuro che ci debba stare?

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python