PyQt5保存QByteArray为json格式

PyQt5 save QByteArray to json format

这是泡菜。我正在尝试将我的 window/other 元素保存为 json 格式,以便我可以将多个数据存储在 1 个位置以供我的 window/etc

我知道 QByteArray 有这些功能: std::string QByteArray::toStdString() 常量 和 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 > 到几何或其他方法 ?

谢谢!

JSON 无法序列化 bytes/bytearray 对象,因此您需要将它们转换为 unicode 对象。这意味着有必要以某种方式 "decode" 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