QTCPSocket 中 QBytesArray 的编码问题

问题描述

我的目标是创建一个服务器/客户端 PyQt 应用程序来通过 QTcpsocket/QTcpserver 传输 XML 文件。下面的sendFileReply 是服务器的函数,用于传输XML 以返回客户端的请求。客户端的 readFileResponse 函数用于回读服务器的响应并将 XML 内容接收/保存到文本文件中。

我怀疑这是通过将 BytesArray 转换为 String 的编码问题。我的第一次尝试是使用 'utf-8' 进行解码,例如 str(xml_byte,'utf-8') 或 xml_byte.decode(encoding='UTF-8',errors='ignore')。但是,它们都没有成功,因为它仍然使用 TextEditor 显示字节格式。我的第二次尝试是使用 'latin-1' 编码,例如 xml_byte.decode('latin-1').encode("utf-8") 或 xml_byte.decode('iso-8859-1').encode(' utf8')。但是,上下文的开头和结尾有奇怪的字符(即 ؀썙

我对 XML 编码和 Qt 编程非常陌生。任何意见或建议都非常感谢。

؀썙
.....
.....
.....
\0A

==============

def sendFileReply(self,xml_content):
    reply = QByteArray()
    stream = QDataStream(reply,qiodevice.writeonly)
    stream.setVersion(QDataStream.Qt_5_9)
    stream.writeUInt16(0)
    stream.writeQString(xml_content)

    stream.device().seek(0)
    stream.writeUInt16(reply.size() - SIZEOF_UINT16)
    self.write(reply)


def readFileResponse(self):  
    stream = QDataStream(self.socket)
    stream.setVersion(QDataStream.Qt_5_9)

    while True:
        if self.nextBlockSize == 0:
            if self.socket.bytesAvailable() < SIZEOF_UINT16:
                break
            self.nextBlockSize = stream.readUInt16()
        if self.socket.bytesAvailable() < self.nextBlockSize:
            break

        xml_byte = stream.readRawData(self.socket.bytesAvailable())  # read byte from Tcpsocket   
        xml_content = xml_byte.decode('latin-1')  # use 'latin-1' because 'utf-8' Failed
        text_file = open("incoming.xml","a")    # save incoming XML to a file
        text_file.write(xml_content)
        text_file.close()

        self.nextBlockSize = 0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)