2017-05-30 4 views
0

Dies ist eine Gurke. Ich versuche, meine Fenster/andere Elemente in JSON-Format zu speichern, so dass ich mehrere Daten an einem Ort für mein Fenster/etc gespeichert haben kannPyQt5 Speichern QByteArray zu JSON-Format

Ich weiß, dass QByteArray hat diese Funktionen: Std :: String QByteArray :: toStdString() const und QByteArray QByteArray :: fromStdString (const std :: string & str)

die es erlauben, sollte ich es zu tun, aber so weit ich komme nicht in Python zu arbeiten. Einige Informationen über finde ich hier (C)> Correct way to losslessly convert to and from std::string and QByteArray

Ich habe versucht, so etwas wie dies zu tun:

print(self.saveGeometry()) 
bar = self.saveGeometry() 
print(bytes(str(bar).encode())) 

QByteArray zu konvertieren byteArray dass dann könnte ich als String speichern, aber ich bin immer

JSon dann laden json> zu QByteArray.fromStdString> zur Geometrie oder eine andere Methode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 1: invalid continuation byte 

kann any1 vorschlagen, wie kann ich entweder die native QT5 5.4+ Funktion QByteArray zu QByteArray.toStdString retten?

Danke!

Antwort

2

JSON kann bytes/bytearray Objekte nicht serialisieren, Sie müssen sie stattdessen in Unicode-Objekte konvertieren. Das bedeutet, dass es notwendig ist, die rohen Bytes, die in der QByteArray enthalten sind, irgendwie zu "dekodieren". Eine Möglichkeit, dies zu tun, besteht darin, zuerst die Bytes in ein ASCII-kompatibles Format zu konvertieren, um jegliche Unicode-Fehler zu vermeiden:

+0

Awesome thanks! Ich bin so weit wie zu Hex(), aber ich konnte es nicht zur Arbeit bringen, vielen Dank für diese Antwort! – Dariusz