Python PyQt5将QByteArray保存为json格式

Python PyQt5将QByteArray保存为json格式,python,json,pyqt,pyqt5,qbytearray,Python,Json,Pyqt,Pyqt5,Qbytearray,这个是泡菜。我正试图将我的窗口/其他元素保存为json格式,这样我就可以在一个地方为我的窗口/等存储多个数据 我知道QByteArray具有以下功能: std::string QByteArray::TostString()常量 和 QByteArray QByteArray::fromStdString(const std::string&str) 这应该允许我这样做,但到目前为止,我无法让它在Python中工作。 我在这里找到的一些信息(C)> 我试过这样做: print(self.sav

这个是泡菜。我正试图将我的窗口/其他元素保存为json格式,这样我就可以在一个地方为我的窗口/等存储多个数据

我知道QByteArray具有以下功能: std::string QByteArray::TostString()常量 和 QByteArray QByteArray::fromStdString(const std::string&str)

这应该允许我这样做,但到目前为止,我无法让它在Python中工作。 我在这里找到的一些信息(C)>

我试过这样做:

print(self.saveGeometry())
bar = self.saveGeometry()
print(bytes(str(bar).encode()))
将QByteArray转换为bytearray,然后我可以将其另存为字符串,但是

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 1: invalid continuation byte
任何人都可以建议如何使用本机QT5 5.4+函数将QByteArray保存到QByteArray.tostString保存到json,然后将json>加载到QByteArray.fromStdString>到geometry或其他方法


谢谢

JSON无法序列化
字节/bytearray
对象,因此需要将它们转换为unicode对象。这意味着有必要以某种方式“解码”包含在
QByteArray
中的原始字节数据。一种方法是首先将字节转换为某种ascii兼容格式,以避免任何unicode错误:

>>> g = widget.saveGeometry()
>>> d = json.dumps(bytes(g.toHex()).decode('ascii'))
>>> x = QByteArray.fromHex(bytes(json.loads(d), 'ascii'))
>>> x == g
True

太棒了,谢谢!我已经到了toHex(),但无法让它工作,非常感谢您的回答!