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

michele a nectarine.it michele a nectarine.it
Mar 30 Set 2008 20:02:26 CEST


Ciao,
sto usando uno script Python in congiunzione con JPype, un framework  
per usare classi Java in Python. Ho però un problema, forse legato ai  
decoding/encoding dei locales.
Passiamo subito al codice:

from jpype import *
import os
import random
import math
import sys

input = open('foo.img','rb').read().decode('ISO-8859-1')

square = java.encoding(input)

output = java.decoding()

fd = open('foo_decode.img','wb')
fd.write(output.encode('ISO-8859-1'))
fd.close()
sys.exit(0)

java.encoding e java.decoding sono due metodi che, rispettivamente,  
prendono come argomento una java String e restituiscono una java  
String. JPype si occupa del bridging e converte una java String in una  
python str o unicode string, e viceversa. Di conseguenza, input e  
output, nel mio programma, sono due unicode.

Qual è il problema? Dovrei ottenere un output identico all'input  
(byte per byte), ma non succede.

Prima di tutto: python mi ha "obbligato" ad usare il  
.decode('ISO-8859-1') e .encode('ISO-8859-1'), altrimenti non avrebbe  
letto/scritto il file specificato.
Inoltre, le librerie Java sono perfettamente funzionanti: ho provato  
io stesso ad usarle tramite lo stesso input (foo.img) e all'uscita del  
decoder ho ottenuto lo stesso file, quindi escludo degli errori delle  
lib.

Sospetto che la differenza tra input e output siano dovute al  
decoding/encoding di python: sono proprio necessari?
Voi che ne pensate?

Vi ringrazio



Maggiori informazioni sulla lista Python