Seite 1 von 1

Python und ByteArrays

Verfasst: Freitag 13. Februar 2009, 10:00
von EntonH
Hallo,

ist es in Python (Version 2.2 oder 2.5) möglich ByteArrays auszulesen, bzw. gibt es eine Python-Klasse, die äquivalent zu Java-Objekten ist und ByteArrays (z.B. java.lang.Object[]) aufnehmen kann?

Hintergrund:
Ich versuche über CORBA von Python mit Java zu kommunizieren, bekomme aber immer eine Fehlermeldung, wenn die Java-Funktion Werte zurückliefert in Form eines CORBA.Any, in dem java.lang.Object[] liegen.

Viele Grüße
EntonH

Verfasst: Freitag 13. Februar 2009, 10:20
von Leonidas
Suchst du array?

Re: Python und ByteArrays

Verfasst: Freitag 13. Februar 2009, 11:43
von numerix
EntonH hat geschrieben:ist es in Python (Version 2.2 oder 2.5) möglich ByteArrays auszulesen, bzw. gibt es eine Python-Klasse, die äquivalent zu Java-Objekten ist und ByteArrays (z.B. java.lang.Object[]) aufnehmen kann?
Da ich die Hintergründe deines Anliegens nicht kenne, ist es ein Schuss ins Blaue, aber vielleicht lässt sich das, was du vorhast, ja mit jython realiseren. Wenn es dir darum geht, in Python programmieren zu wollen und mit Java kommunizieren zu müssen, dann könnte das was für dich sein.

Verfasst: Samstag 14. Februar 2009, 10:59
von sma
Bei Python 2.x ist ein "str" auch aus Bytes zusammengesetzt, kann also als Byte-Array missbraucht werden. Ab Python 3.x ist ein "str" dann (wie in Java oder bei Python 2.x der Typ "unicode") eine UTF-16-kodierte Folge von Unicode-Zeichen und es gibt einen neuen Typ "bytes" für Byte-Arrays.

Stefan

Verfasst: Samstag 14. Februar 2009, 12:52
von Darii
sma hat geschrieben:Ab Python 3.x ist ein "str" dann (wie in Java oder bei Python 2.x der Typ "unicode") eine UTF-16-kodierte Folge von Unicode-Zeichen und es gibt einen neuen Typ "bytes" für Byte-Arrays.
Worauf ich mich nicht verlassen würde es gibt auch die Möglichkeit Python mit UCS-4-Unterstützung zu kompilieren.

Verfasst: Samstag 14. Februar 2009, 12:56
von Leonidas
Und UTF-16 ist es sowieso nicht, sondern wie Darii bereits andeutete UCS-2 oder UCS-4.

Verfasst: Samstag 14. Februar 2009, 13:15
von sma
Leonidas hat geschrieben:Und UTF-16 ist es sowieso nicht, sondern wie Darii bereits andeutete UCS-2 oder UCS-4.
UTF-16 ist ein Superset von UCS-2 (die Unicode-FAQ empfiehlt UCS-2 nicht länger zu benutzen), somit liege ich nicht völlig falsch.

Offenbar unterstützt Python aber nur Unicodezeichen bis U+FFFF einschließlich, wenn man nicht mit UCS-4 kompiliert (was wiederum nahezu UTF-32 entspricht) und verzählt sich somit (da UTF-16 für Zeichen größer U+FFFF zwei "code units" benutzt) ab U+10000.

Am Ende des Tages heißt das aber alles nix anderes, als das mindestens 2 Bytes pro Zeichen verwendet werden und die Länge eines Strings in Bytes nicht der Anzahl der Zeichen entspricht und Strings etwas anderes als Byte-Arrays sind.

Stefan