PyQt5将QByteArray保存为json格式

时间:2017-05-30 08:27:37

标签: python json pyqt pyqt5 qbytearray

这是一个泡菜。我正在尝试将我的窗口/其他元素保存为json格式,以便我可以将多个数据存储在我的窗口/等的一个位置

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

哪个应该允许我这样做但是到目前为止我无法在Python中使用它。 关于我在这里找到的一些信息(C)> Correct way to losslessly convert to and from std::string and QByteArray

我尝试过这样的事情:

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

any1可以建议我如何使用原生QT5 5.4+函数将QByteArray保存到QByteArray.toStdString到json然后加载json>到QByteArray.fromStdString>几何或其他方法?

谢谢!

1 个答案:

答案 0 :(得分:6)

JSON无法序列化bytes/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