On Wed, Oct 1, 2008 at 1:08 AM, Daniele Varrazzo <[EMAIL PROTECTED]> wrote: > >> input = open('foo.img','rb').read().decode('ISO-8859-1') > > Direi che non ha senso usare un encoding testuale per codificare > un'immagine.
Sono d'accordo. Più avanti ti spiego perché sono stato costretto ad utilizzarli. >> 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. > > ok... e cosa fanno? Ho provato a cercare in > http://jpype.sourceforge.net/doc/user-guide/userguide.html ma non ho > trovato niente. Sono due metodi di una libreria proprietaria che sto usando. La segnatura di encode è (String data), mentre quella di decode è void. >> 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. > > E cosa ottieni? Maggiori informazioni potrebbero aiutarci a diagnosticare > il problema. 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) L'unico modo per non avere il decodeerror, è di fare il decode della stringa in input: input = open('foo.img','rb').read().decode('ISO-8859-1') ma a quel punto come sappiamo non ottengo il risultato corretto. Sospetto che sia JPype che vuole una conversione forzata da str a unicode, ma perché lo forza? (vedi più avanti un caso in cui la conversione non viene forzata). Ho provato anche a dare un'occhiata qui: http://jpype.sourceforge.net/doc/user-guide/userguide.html#conversion ma si indica chiaramente che le python str vengono convertite in java String. > Non so cosa stai facendo: se devi lavorare con un'immagine (o altri dato > binari), unicode non è lo strumento adatto. Se devi lavorare con del > testo, unicode può essere la cosa giusta, ma l'encoding di partenza devi > conoscerlo. Devo soltanto chiamare la libreria di encoding passando come argomento una stringa con il contenuto del file (il file può essere qualsiasi, in questo caso è un file video). Il contenuto del file è rappresentato in una stringa (da python); nota che se il contenuto del file fosse, supponiamo: input = "foo123" d = encoder.encode(input) in questo caso l'encoder funziona correttamente (e python non lamenta un unicodeerror). La domanda è quindi: supposto che la libreria funziona correttamente, e nel caso in cui la stringa di input in python sia una semplice stringa di testo lo script funziona correttamente, perché sono costretto a fare il decode del file binario che passo allo script? Grazie _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python